三个.htaccess缓存规则的区别

10

以下三个 .htaccess 规则有什么区别?在什么情况下使用每个规则,并且是否有一些特殊的用例更倾向于使用其中一个规则而不是另外的两个规则?

Header set Cache-Control "max-age=290304000"
Header set Expires "Thu, 15 Apr 2020 20:00:00 GMT"
ExpiresDefault "access plus 10 years"
2个回答

7

Headermod_headers的一个指令,允许修改HTTP头字段。在这种情况下,Header set有效地设置了所述头字段Cache-ControlExpires,因此已经存在的头字段将被覆盖。

第一个指令使用值max-age=290304000设置了头字段Cache-Control,该值描述了相对于响应时间的新鲜度生存期为290304000秒。

与此相反,第二个指令使用值为Thu, 15 Apr 2020 20:00:00 GMTExpires头字段设置绝对时间值来描述新鲜度生命周期。 Cache-Controlmax-age值和Expires过期时间戳都可以转换为另一个值

4.2.1. 计算新鲜度生命周期

缓存可以通过以下第一项匹配计算响应的新鲜度生命期(表示为freshness_lifetime):

  • ...

  • 如果响应头中存在max-age指令(第5.2.2.8节),使用其值;否则

  • 如果响应头中存在Expires字段(第5.3节),使用其值减去Date响应头字段的值;否则

  • ...

但是,如果两者都存在,则Cache-Controlmax-age优先于Expires

如果响应包含带有max-age指令(第5.2.2.8节)的Cache-Control字段,则接收方必须忽略Expires字段。同样,如果响应包括s-maxage指令(第5.2.2.9节),则共享缓存接收方必须忽略Expires字段。在这两种情况下,Expires中的值仅适用于尚未实现Cache-Control字段的接收方。

与手动设置HTTP缓存控制头字段不同,mod_expires ExpiresDefault指令允许轻松设置HTTP缓存。新鲜度生命周期可以用绝对值或相对值来描述,可以相对于响应时间(即access/now),也可以相对于所请求的文件的修改时间(即modification)。它同时使用了Cache-ControlExpires

在这种情况下,第三个指令将默认新鲜度生命周期设置为从响应时间开始的10年。

我会使用mod_expires进行HTTP缓存控制,而不是使用Header手动操作。这更加方便,允许相对和绝对的新鲜度时间,并同时使用Cache-ControlExpires


3
第一个规则在Cache-Control中添加了一个max-age条目。浏览器必须在此处给出的秒数之后重新获取文档。
第二和第三个规则创建了过期头。浏览器必须在此处给出的日期重新获取文档。服务器必须进行一些计算。
请注意,第二个规则强制刷新所有浏览器和所有资源,而第三个和最后一个规则根据请求时间使浏览器缓存无效。如果您有一个带有高流量的网站,您将看到巨大的高峰在2020年4月15日。 :)
作为经验法则:使用max-age。它非常好支持,您没有机会创建无效日期。此外,它更短。
进一步阅读:

10个URL通过使用“01 jan 0001”的过期时间声明它们已经过期(可能已经枯萎)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接