服务器以 Status=304 响应一个浏览器的 GET 请求,以 200 响应另一个浏览器的 GET 请求

server responds to one browser's GET request with Status=304 and another's with 200

本文关键字:GET 响应 浏览器 请求 另一个 一个 Status 服务器      更新时间:2023-09-26

我正在尝试调试我的.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 中看到的同一网页时:

名称=包装器.html,方法=GET,状态=200(正常),类型=文本/html

名称=应用.html,方法=GET,状态=200(正常),类型=应用程序/X冲击波闪光

对于铬:

名称=包装器.html,方法=GET,状态=304(未修改),类型=文本/html

名称=应用程序.html,方法=GET,状态=304(未修改),类型=应用程序/x冲击波闪光

问题是Safari应该从缓存

中检索时从服务器下载,而Chrome则正确地从缓存中检索。

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

更新

我刚刚检查了缓存文件,似乎 Safari 首先没有将下载的文件放入缓存中,以便在将来访问时从中提取。不知道为什么。

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

我不知道为什么 Safari 不发送标头,或者它只是在某些时候发生还是与某处的浏览器设置有关。但你不是唯一一个发生这种情况的人。