【问题标题】:server responds to one browser's GET request with Status=304 and another's with 200服务器以 Status=304 响应一个浏览器的 GET 请求,另一个以 200 响应
【发布时间】:2013-10-31 20:51:40
【问题描述】:

我正在尝试调试我的 .htaccess 文件,其中包含:

<FilesMatch "\.(html|swf)$">
  <IfModule mod_headers.c>
      Header set Cache-Control "no-cache, public"
  </IfModule>
</FilesMatch>

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType text/html                     "access plus 0 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
</IfModule>

重复访问我在 Safari 中看到的同一网页:

Name=Wrapper.html, Method=GET, Status=200 (OK), Type=text/html

Name=App.html, Method=GET, Status=200 (OK), Type=application/x-shockwave-flash

对于 Chrome:

Name=Wrapper.html,Method=GET,Status=304(未修改),Type=text/html

Name=App.html,Method=GET,Status=304(未修改),Type=application/x-shockwave-flash

问题是 Safari 在应该从缓存中检索时从服务器下载,而 Chrome 正确地从缓存中检索。

那么,我如何将Status=304 从服务器获取到 Safari(如 Chrome 所示)? (我猜这是根本原因,如果不是,请告诉我)

更新

我刚刚检查了缓存文件,似乎 Safari 最初并未将下载的文件放入缓存中,以便在以后访问时使用。不知道为什么。

【问题讨论】:

    标签: javascript html apache .htaccess


    【解决方案1】:

    这与服务器或 htaccess 文件无关。 Safari 发送的请求需要一个 If-Modified-Since 标头,否则如果 Last-Modified 时间早于请求中的时间,则 apache 不会以 304 响应。

    我不知道为什么 Safari 不发送标头,或者它只是偶尔发生还是与某处的某些浏览器设置有关。但是you're not the only one that this is happening to

    【讨论】:

    • writing.amanjeev.com/2011/02/… Safari 4 precisely is being a snob. It does not send that header at all. All it sends is Pragma: no-cache. That is not very helpful. 添加但确定这有多相关。
    • @ggkmath 第一篇文章是和Apache相关的吗?我几乎 100% 确定 apache 以标准格式返回所有日期。
    • 是的,我的帖子使用 Apache。我这里抓紧了,可能完全不相关。
    • 似乎发布缓存清单确实会导致 Safari 缓存应用程序,但我真的不能强迫用户将正常缓存中的内容存储到他们的私有磁盘空间中。所以,这不是我的解决方案。想知道其他人是否有任何想法如何解决?
    猜你喜欢
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多