以下三个 .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,因此已经存在的头字段将被覆盖。
第一个指令使用值max-age=290304000
设置了头字段Cache-Control,该值描述了相对于响应时间的新鲜度生存期为290304000秒。
Thu, 15 Apr 2020 20:00:00 GMT
的Expires头字段设置绝对时间值来描述新鲜度生命周期。
Cache-Control的max-age值和Expires过期时间戳都可以转换为另一个值:
4.2.1. 计算新鲜度生命周期
缓存可以通过以下第一项匹配计算响应的新鲜度生命期(表示为freshness_lifetime):
但是,如果两者都存在,则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_expires ExpiresDefault
指令允许轻松设置HTTP缓存。新鲜度生命周期可以用绝对值或相对值来描述,可以相对于响应时间(即access
/now
),也可以相对于所请求的文件的修改时间(即modification
)。它同时使用了Cache-Control和Expires。
在这种情况下,第三个指令将默认新鲜度生命周期设置为从响应时间开始的10年。
我会使用mod_expires进行HTTP缓存控制,而不是使用Header
手动操作。这更加方便,允许相对和绝对的新鲜度时间,并同时使用Cache-Control和Expires。
Web作者和站长的缓存教程 - 每个web开发者都应该阅读。
Opera MAMA: HTTP Headers - 一些有趣的统计数据,尤其是完整的Expires频率表格很有趣:
10个URL通过使用“01 jan 0001”的过期时间声明它们已经过期(可能已经枯萎)。