何时发送" if-none-match" -request?

时间:2015-04-10 16:31:27

标签: http http-headers http-caching http-etag if-none-match

在优化我们网站的缓存行为的同时,我注意到有很多if-none-match个请求被发送到我们的网站。据我了解缓存,只要缓存仍然有效,就不应该这样。

一个特定请求会生成以下response-header

HTTP/1.1 200 OK
Cache-Control: public, max-age=25920000
Transfer-Encoding: chunked
Content-Type: application/javascript; charset=utf-8
Content-Encoding: gzip
Expires: Thu, 04 Feb 2016 17:20:09 GMT
Last-Modified: Mon, 01 Jan 2001 23:00:00 GMT
ETag: W/"0"
Vary: Accept-Encoding
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
Date: Fri, 10 Apr 2015 16:20:09 GMT

如您所见,缓存有效期为300天。我理解它的方式,浏览器应该在那段时间内直接使用它的缓存。只有在此期间结束后,它才会发出带有标头if-none-match的请求。 但浏览器似乎忽略了这一点,并且每次加载页面时都会发送此if-none-match - 请求,只是为了接收304-response ("Not Modified")

我需要更改什么才能阻止浏览器发送这些无用的请求?

1 个答案:

答案 0 :(得分:0)

是的,虽然缓存是新的浏览器应使用本地副本而不重新验证。但是,这不能保证。例如,当用户使用Refresh button浏览器时,无论如何都会向源服务器发出请求。

有一个Cache-Control: immutable, max-age=…扩展名告诉浏览器你真的应该在不联系服务器的情况下使用缓存资源。