chrome和safari不完全支持Mod_expires缓存指令



我们想要使用缓存指令来告诉浏览器只有在我们修改了资源后才从源(我们的服务器)获取资源。根据Apache,我们可以使用" modify "基本子句和"access"基本子句。

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

当我们使用"access"时,我们可以在浏览器的检查器中看到Expires头被设置为比Date头晚1分钟。然而,当我们使用"修改"时,过期报头与日期报头是完全匹配的。

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

有谁知道一种所有主流浏览器都支持的"修改"方法吗?

这样做的原因是因为当使用"修改"时,缓存的文件被所有浏览器所认可。因此,当我将缓存设置为"修改加1分钟"并在Firefox中下载文件时,它会将过期日期设置为文件的最后修改时间加1分钟。例如:

Expires:Thu, 03 Sep 2015 19:49:03 GMT

现在,1分钟后,当我试图在另一个浏览器(Safari或Chrome)中查看它时,因为该文件尚未在服务器上修改,这些浏览器将显示并使用Firefox存储的缓存记录中的Expires Header。

这意味着,在服务器上修改文件1分钟后,缓存副本将不再被用户计算机上的任何浏览器(客户端)使用。

摘自Apache文档:

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.

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

最新更新