我们希望使用缓存指令告诉浏览器只有在我们修改了资源时才从源(我们的服务器)获取资源。根据Apache的说法,我们可以使用“修改”基础子句以及“访问”。
http://httpd.apache.org/docs/2.2/mod/mod_expires.html
我们发现所有浏览器都支持“访问”,但Chrome和Safari不支持“修改”。我们尝试了以下两种语法:
FileETag MTime Size
ExpiresActive On
ExpiresByType text/html "modification 1 minute"
和
FileETag MTime Size
ExpiresActive On
ExpiresByType text/html M60
当我们使用“访问”时,我们可以在浏览器的检查员中看到Expires Header设置为Date Header之后的1分钟。但是,当我们使用“修改”时,Expires Header与Date Header完全匹配。
Date:Thu, 03 Sep 2015 12:31:44 GMT
Expires:Thu, 03 Sep 2015 12:31:44 GMT
任何人都知道使用所有主流浏览器支持的“修改”的方法吗?
答案 0 :(得分:0)
原因是因为使用"修改"所有浏览器都尊重缓存的文件。所以,当我将缓存设置为"修改加1分钟"并在Firefox中下载文件,它会将到期日设置为文件的最后修改时间加上1分钟。例如:
到期日:2015年9月3日星期四19:49:03 GMT
现在,1分钟后,当我尝试在另一个浏览器(Safari或Chrome)中查看它时,因为该文件尚未在服务器上修改,这些浏览器将显示并使用Firefox存储的缓存记录中的Expires Header 。
这意味着,在服务器上修改文件后的1分钟,用户计算机上的任何浏览器(客户端)都将不再使用缓存副本。
摘自Apache docs:
The base time is either the last modification time of the file, or the time of the client's access to the document. Which should be used is specified by the <code> field; M means that the file's last modification time should be used as the base time, and A means the client's access time should be used.
使用修改基准时间通常是一个坏主意,因为文件将在经过时间后不再缓存,直到您再次在服务器上实际修改它为止。您通常会将修改基准时间用于定期更新的文件,而不是随机间隔。