【问题标题】:When is an "if-none-match"-request sent?何时发送“if-none-match”请求?
【发布时间】:2015-06-16 11:10:33
【问题描述】:

在优化我们网站的缓存行为时,我注意到大量if-none-match-requests 被发送到我们的网站。据我了解缓存,只要缓存仍然有效,就不应该是这种情况。

一个特定的请求会生成以下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")

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

【问题讨论】:

  • 不知道,但不会用Cache-Control: max-age=600 替换HTTP/1.0 标签?帮忙?
  • 你能大致说出你看到多少这样的请求吗?可能是来自客户端重新加载页面?这可能会触发某些浏览器重新验证资源。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-05-09
    • 2021-02-03
    • 2011-01-07
    • 2012-11-27
    • 1970-01-01
    • 2019-08-26
    • 2012-12-28
    • 2018-06-24
    • 2016-06-24
    相关资源
    最近更新 更多