2015-09-03 34 views
0

我们想要使用缓存指令来告诉浏览器从源(我们的服务器)获取资源,只有当我们修改了资源。根据Apache的说法,我们可以使用“修改”基本条款以及“访问”。mod_expires高速缓存指令并不完全支持铬和safari

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头后,被设置为1分钟日期标题。但是,当我们使用“修改”时,Expires标题与日期标题完全匹配。

Date:Thu, 03 Sep 2015 12:31:44 GMT 
Expires:Thu, 03 Sep 2015 12:31:44 GMT 

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

回答

0

原因是因为在使用“修改”时,所有浏览器都会遵守缓存的文件。因此,当我将缓存设置为“修改加1分钟”并在Firefox中下载文件时,它会将截止日期设置为文件上次修改时间加上1分钟。例如:

到期日:星期四,2015年9月3日19时49分03秒GMT现在

,1分钟后,当我试图在其他浏览器(Safari浏览器或Chrome)进行查看,因为该文件一直没这些浏览器会在Firefox存储的缓存记录中显示并使用Expires头。

这意味着的是,该文件在服务器上修改正好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. 

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