5

我在一个在 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

关于此设置的一些问题:

  • 缓存控制过期是不同的时间间隔不是问题吗?
  • etaglast-modified不是多余的吗?
  • 如果使用 HTTP/2,在缓存性能方面还应该做些什么吗?
4

1 回答 1

6

回答您的问题:

  1. 不,这不是问题。如果两者都指定,则优先使用缓存控制而不是 Expiries。大多数情况下,尽管 Web 服务器将它们设置为具有相同的值。

  2. ETag 和 Last-Modified 都用于优先使用 ETag 的条件响应(类似于 Cache-Control 和 Expiries)。Last-Modified 的好处是它更易于阅读,尽管 ETags 允许在除日期之外的其他内容上定义它的额外灵活性。尽管 Etags 的一些实现存在问题(我不建议将它们用于 Apache 服务器,例如我在这里描述的:https ://www.tunetheweb.com/performance/http-performance-headers/etag/ )。

  3. HTTP/2 在缓存方面没有任何改变,因此使用与 HTTP/1 相同的标头和控件。它还有许多其他性能优势。然而,服务器推送带来了一些有趣的问题,即如何只推送不在缓存中的资源(使用缓存摘要或某种基于 cookie 的系统来告诉服务器客户端已经缓存了什么)。但是使用上面提到的 HTTP 标头进行缓存的基础知识保持不变。

于 2017-07-12T13:40:49.857 回答