避免304(未修改)响应



ExpiresDefault Apache指令是否足够避免服务器中的HTTP状态304响应?我已经设置了ExpiresDefault "access plus 10 years",但是每当我在本地phpmyfaq网站上打开任何页面时,我仍会看到"GET /assets/template/default/css/style.min.css?v=1 HTTP/1.1"的日志条目。清空浏览器缓存似乎并没有改变任何内容。

您的服务器发送的Expires:标头与将来的304响应无关。它仅向客户/代理提供估算,以便在考虑资源"陈旧"之前可以等待多长时间。客户不是所需的要观察此标头,并且可以自由地继续向相同资源提出新的请求。因此,简单地回答您的问题:

否,无论您发送的标题如何

304响应是客户端请求中匹配的If-MatchIf-Modified-Since标头的结果。这里发生的事情是您的服务器以其原始响应发送了以下标题:

  • ETag
  • Last-Modified

客户端将其请求发送回以下标题,以查看资源是否已从其缓存版本中更改:

  • If-Match(ETAG)
  • If-Modified-Since(最后修改)

如果这些条件中的任何一个都是正确的,则服务器将发送您观察到的304 Not Modified响应,并且客户端将知道它可以安全地提供其资源的缓存版本。

合规性注释

RFC 2616第14.21节实际上禁止兼容的服务器将来发送Expires标题超过一年,因此您不应该首先使用"访问加10年" :>

HTTP/1.1服务器将来不应发送到期日期超过一年。

最新更新