什么时候发送“if-none-match”-request?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么时候发送“if-none-match”-request?相关的知识,希望对你有一定的参考价值。

在优化我们网站的缓存行为的同时,我注意到有很多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 -request只是为了接收304-response ("Not Modified")

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

答案

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

有一个Cache-Control: immutable, max-age=…扩展,告诉浏览器你真的真的意味着他们应该使用缓存资源而不联系服务器。

以上是关于什么时候发送“if-none-match”-request?的主要内容,如果未能解决你的问题,请参考以下文章

Safari 不发送“If-Modified-Since”和“If-None-Match”标头

浏览器未发送 If-None-Match 标头

预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 If-None-Match

HTTP之一 If-Modified-Since & If-None-Match

ETag 和 If-None-Match HTTP 标头不起作用

Last-Modified If-Modified-Since ETag If-None-Match