避免304(未修改)响应

时间:2014-03-13 15:19:03

标签: apache http http-status-codes http-status-code-304

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

1 个答案:

答案 0 :(得分:12)

您的服务器发出的Expires:标头与未来的304响应无关。它仅向客户/代理提供估计它们在考虑资源“陈旧”之前可以等待多长时间的估计。"客户端 需要来观察此标头,如果愿意,可以继续为同一资源继续发出新请求。所以,简单地回答你的问题:

  

不,无论您发送的是哪种标头,您都永远无法明确阻止用户对同一资源发出新请求。

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

  • ETag
  • Last-Modified

客户端然后发回以下标头及其请求,以查看资源是否已从其缓存版本更改:

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

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

合规性说明

RFC 2616 Section 14.21实际上禁止合规服务器在未来一年内发送Expires标头,因此您不应该使用"访问加10年& #34; 首先:

  

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