0

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

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

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

4

1 回答 1

0

这是因为当使用“修改”时,所有浏览器都会支持缓存文件。因此,当我将缓存设置为“修改加 1 分钟”并在 Firefox 中下载文件时,它会将到期日期设置为文件的最后修改时间加 1 分钟。例如 :

过期:星期四,2015 年 9 月 3 日 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.

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

于 2015-09-03T20:06:41.143 回答