在优化我们网站的缓存行为时,我注意到大量的 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 响应(“未修改”)
.
我需要更改什么以防止浏览器发送这些无用的请求?
最佳答案
是的,虽然缓存是新的,但浏览器应该使用本地副本而不需要重新验证。但是,这并不能保证。例如,当用户使用 Refresh button无论如何,浏览器都会向源服务器发出请求。
有一个Cache-Control: immutable, max-age=…
告诉浏览器你的意思是他们应该在不联系服务器的情况下使用缓存资源的扩展。
关于http - 什么时候发送 "if-none-match"请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566397/