以下三个.htaccess规则之间的区别是什么以及何时使用每个规则,是否有任何特殊用例更喜欢其中一个?:
Header set Cache-Control "max-age=290304000"
Header set Expires "Thu, 15 Apr 2020 20:00:00 GMT"
ExpiresDefault "access plus 10 years"
答案 0 :(得分:7)
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’s max-age value and Expires expiration time stamp can be transformed to the other:
4.2.1。计算新鲜度寿命
缓存可以计算新鲜度生命周期(表示为 fresh_lifetime)通过使用第一个匹配的响应 以下内容:
...
如果存在max-age响应指令(Section 5.2.2.8), 使用它的值,或
如果存在Expires响应标头字段(Section 5.3),请使用 其值减去Date响应头字段的值,或
...
但如果两者都存在,Cache-Control’s max-age is preferred over Expires:
如果响应包含具有max-age的Cache-Control字段 指令(Section 5.2.2.8),收件人必须忽略Expires 领域。同样,如果响应包含s-maxage指令 (Section 5.2.2.9),共享缓存收件人必须忽略Expires 领域。在这两种情况下,Expires中的值仅用于预期 对于尚未实现Cache-Control字段的收件人。
而不是手动设置这些HTTP缓存控制头字段,mod_expires ExpiresDefault
directive允许轻松设置HTTP缓存。可以使用绝对值或相对值来描述新鲜度生命周期,相对于响应时间(即access
/ now
)或相对于所请求文件的修改时间(即{ {1}})。它使用 Cache-Control 和 Expires 。
在这种情况下,第三个指令将默认新鲜度生命周期设置为自响应时起10年。
我会使用mod_expires进行HTTP缓存控制,而不是使用modification
手动执行。它更方便,允许相对和绝对新鲜度时间,并使用 Cache-Control 和 Expires 。
答案 1 :(得分:3)
第一条规则向Cache-Control添加max-age条目。浏览器必须在此处给出的时间后以秒为单位重新获取文档。
第二个和第三个规则创建过期标头。浏览器必须在此处给出的日期重新获取文档。服务器必须做一些计算。
请注意,第二条规则强制同时刷新所有浏览器和所有资源,而第三条和最后一条规则根据请求时间使浏览器缓存无效。如果您的网站拥有大量流量,您会看到差异:您可能会在2020年4月15日获得一个戏剧性的高峰。:)
根据经验法则:使用max-age。非常good supported,您没有机会创建无效日期。此外,它更短。
进一步阅读:
Caching Tutorial for Web Authors and Webmasters - 必读 对于每个Web开发人员。
Opera MAMA: HTTP Headers - 一些有趣的统计数据,尤其是full Expires frequency表格很有趣:
10个网站通过使用“01 jan 0001”的到期权威地声明它们已过期(并且可能是木乃伊)。