chrome和safari

时间:2015-09-03 12:32:31

标签: google-chrome safari mod-expires

我们希望使用缓存指令告诉浏览器只有在我们修改了资源时才从源(我们的服务器)获取资源。根据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

任何人都知道使用所有主流浏览器支持的“修改”的方法吗?

1 个答案:

答案 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.

使用修改基准时间通常是一个坏主意,因为文件将在经过时间后不再缓存,直到您再次在服务器上实际修改它为止。您通常会将修改基准时间用于定期更新的文件,而不是随机间隔。