缓存和 HTTP/2
Caching and HTTP/2
我在 HTTP/2 上的站点 运行 上,我发现了以下缓存设置:
cache-control:max-age=604800, private
etag:W/"115-54e8a25e7b187"
expires:Fri, 14 Jul 2017 11:39:45 GMT
last-modified:Tue, 02 May 2017 13:02:11 GMT
关于此设置的一些问题:
- cache-control和expires是不同的时间间隔不是问题吗?
- etag 和 last-modified 不是多余的吗?
- 如果 HTTP/2 正在使用,在缓存性能方面是否还应该做一些其他事情?
您问题的答案:
不,这不是问题。如果两者都指定,则 Cache-control 优先于 Expiries 使用。大多数情况下,虽然网络服务器将它们设置为具有等效值。
ETag和Last-Modified都用于条件响应,优先使用ETag(类似于Cache-Control和Expiries)。 Last-Modified 的好处是它更易于阅读,尽管 ETag 允许在日期以外的其他内容上定义它时更加灵活。尽管 Etags 的某些实现存在问题(我不建议将它们用于 Apache 服务器,例如我在此处描述的:https://www.tunetheweb.com/performance/http-performance-headers/etag/)。
HTTP/2 在缓存方面没有任何改变,因此使用与 HTTP/1 相同的 headers 和控件。它还有很多其他性能优势。然而,服务器推送带来了有趣的问题,即如何只推送不在缓存中的资源(使用 cache-digests 或某种基于 cookie 的系统来告诉服务器客户端已经缓存了什么)。但是上面提到的使用 HTTP headers 缓存的基础保持不变。
我在 HTTP/2 上的站点 运行 上,我发现了以下缓存设置:
cache-control:max-age=604800, private
etag:W/"115-54e8a25e7b187"
expires:Fri, 14 Jul 2017 11:39:45 GMT
last-modified:Tue, 02 May 2017 13:02:11 GMT
关于此设置的一些问题:
- cache-control和expires是不同的时间间隔不是问题吗?
- etag 和 last-modified 不是多余的吗?
- 如果 HTTP/2 正在使用,在缓存性能方面是否还应该做一些其他事情?
您问题的答案:
不,这不是问题。如果两者都指定,则 Cache-control 优先于 Expiries 使用。大多数情况下,虽然网络服务器将它们设置为具有等效值。
ETag和Last-Modified都用于条件响应,优先使用ETag(类似于Cache-Control和Expiries)。 Last-Modified 的好处是它更易于阅读,尽管 ETag 允许在日期以外的其他内容上定义它时更加灵活。尽管 Etags 的某些实现存在问题(我不建议将它们用于 Apache 服务器,例如我在此处描述的:https://www.tunetheweb.com/performance/http-performance-headers/etag/)。
HTTP/2 在缓存方面没有任何改变,因此使用与 HTTP/1 相同的 headers 和控件。它还有很多其他性能优势。然而,服务器推送带来了有趣的问题,即如何只推送不在缓存中的资源(使用 cache-digests 或某种基于 cookie 的系统来告诉服务器客户端已经缓存了什么)。但是上面提到的使用 HTTP headers 缓存的基础保持不变。