【问题标题】:mod_expires caching directives not fully supported by chrome and safarichrome 和 safari 不完全支持 mod_expires 缓存指令
【发布时间】:2015-09-03 12:32:30
【问题描述】:

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

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

【问题讨论】:

    标签: google-chrome safari mod-expires


    【解决方案1】:

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

    到期时间:2015 年 9 月 3 日星期四 19:49:03 GMT

    现在,一分钟后,当我尝试在另一个浏览器(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.
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      相关资源
      最近更新 更多