http - 什么时候发送 "if-none-match"请求?

标签 http http-headers http-caching 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 响应(“未修改”).

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

最佳答案

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

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

关于http - 什么时候发送 "if-none-match"请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566397/

相关文章:

javascript - 如何在 https 站点内的 iframe 中允许 http 站点?

ios - xcode 的 HTTP 发布示例

HTTP 1.1 到 HTTP/2 : what about headers?

http - HTTP 响应结束

Azure CDN - 使用 ETag 启用 HTTP 304 缓存 - 托管 Web 角色

ruby-on-rails - 区分浏览器请求和来自移动应用程序的请求的最佳方式?

http - MIME header 声明是一个好的做法吗?

http - http header 末尾是否包含零?

ruby-on-rails - '变化 : If-None-Match' to cache mobile and desktop requests separately

具有请求授权的 HTTP 缓存