以下三个 .htaccess 规则之间有什么区别以及何时使用每个规则,是否有任何特殊用例更喜欢其中一个?:
Header set Cache-Control "max-age=290304000"
Header set Expires "Thu, 15 Apr 2020 20:00:00 GMT"
ExpiresDefault "access plus 10 years"
以下三个 .htaccess 规则之间有什么区别以及何时使用每个规则,是否有任何特殊用例更喜欢其中一个?:
Header set Cache-Control "max-age=290304000"
Header set Expires "Thu, 15 Apr 2020 20:00:00 GMT"
ExpiresDefault "access plus 10 years"
Header
是mod_headers的指令,允许修改 HTTP 标头字段。在这种情况下Header set
,有效地设置了提到的标头字段Cache-Control和Expires,因此已经存在的标头字段将被覆盖。
第一个指令将标头字段Cache-Control的值设置为 ,该值max-age=290304000
将新鲜生命周期描述为相对于响应时间的 290304000 秒。
与此相反,第二个指令将头字段Expires设置为用Thu, 15 Apr 2020 20:00:00 GMT
绝对时间值描述新鲜生命周期的值。
Cache-Control的max-age值和Expires过期时间戳都可以转换为另一个:
4.2.1。计算新鲜度生命周期
缓存可以通过使用以下的第一个匹配项来计算响应的新鲜度生命周期(表示为freshness_lifetime):
...
如果存在 max-age 响应指令(第 5.2.2.8 节),请使用它的值,或者
如果存在 Expires 响应头字段(第 5.3 节),则使用其值减去 Date 响应头字段的值,或者
...
但如果两者都存在,则Cache-Control的max-age优于Expires:
如果响应包含带有 max-age 指令(第 5.2.2.8 节)的 Cache-Control 字段,接收者必须忽略 Expires 字段。同样,如果响应包含 s-maxage 指令(第 5.2.2.9 节),共享缓存接收者必须忽略 Expires 字段。在这两种情况下,Expires 中的值仅适用于尚未实现 Cache-Control 字段的收件人。
无需手动设置这些 HTTP 缓存控制标头字段,mod_expiresExpiresDefault
指令允许轻松设置 HTTP 缓存。新鲜寿命可以用绝对值或相对值来描述,相对于响应时间(即access
/ now
)或相对于请求文件的修改时间(即modification
)。它同时使用Cache-Control和Expires。
在这种情况下,第三个指令将默认的新鲜寿命设置为从响应时间开始的 10 年。
我会使用 mod_expires 进行 HTTP 缓存控制,而不是使用Header
. 它更方便,允许相对和绝对新鲜时间,并同时使用Cache-Control和Expires。
第一条规则将 max-age 条目添加到 Cache-Control。浏览器必须在此处给出的秒数后重新获取文档。
第二条和第三条规则创建过期标头。浏览器必须在此处给出的日期重新获取文档。服务器必须进行一些计算。
请注意,第二条规则强制同时刷新所有浏览器和所有资源,而第三条也是最后一条规则根据请求时间使浏览器缓存无效。如果您的网站流量很大,您会看到不同之处:您可能会在 2020 年 4 月 15 日达到一个戏剧性的高峰。:)
根据经验:使用 max-age。它得到了很好的支持,您没有机会创建无效日期。此外,它更短。
进一步阅读:
Web 作者和网站管理员的缓存教程- 每个 Web 开发人员的必读。
Opera MAMA: HTTP Headers – 一些有趣的统计数据,尤其是完整的 Expires 频率表很有趣:
10 个 URL 通过使用“01 jan 0001”的过期时间来权威地声明它们已过期(并且可能已被木乃伊化)。