gpt4 book ai didi

http - 缓存控制不返回 304

转载 作者:行者123 更新时间:2023-12-03 23:43:26 28 4
gpt4 key购买 nike

我有一个网站,其静态 Assets 不会改变(js、图像等)。这些 Assets 中的每一个都具有设置了以下属性的缓存控制 header :

cache-control: public, max-age=31536000, immutable
但是,当我重新加载页面时,我仍然看到来自服务器的 200 个响应而不是 304 个响应。浏览器指示正在从内存或磁盘缓存提供 Assets ,但它仍在发出请求并下载内容。这曾经工作过,我倾向于这是一个浏览器错误,但我不完全确定。

最佳答案

评论中讨论的内容以及凯文提到的内容,您似乎误解了 conditional get要求。
有很多问题你可能想得到答案:
1. 为什么浏览器会得到 HTTP 200 状态而不是 304?
当浏览器加载任何文档时,对静态资源的请求将通过缓存处理程序,如果资源存在于本地缓存中,则请求将由缓存处理程序作为服务器,响应将具有 HTTP 200 状态,而不是向服务器发送请求。
例如,对于这个 stackoverflow 页面,当我刷新页面时,我还在网络选项卡中看到类似 的内容。 jQuery 例如。
enter image description here
但是没有任何请求来获取资源。 查看fiddler,有建立HTTPS连接的请求,但没有获取jQuery。
enter image description here
2. 浏览器什么时候发送条件请求?
当缓存过期时,用户代理将发送有条件的 get 请求来验证内容是否被修改,如果资源没有被修改,服务器将发送 HTTP 304 响应并同时为内容共享新的过期日期。
enter image description here
对于我们的 jQuery 示例,您可以从 postman 发送以下请求:

GET https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js
Header:
Cache-Control: public
If-Modified-Since: Tue, 03 Mar 2020 19:15:00 GMT
您将收到以下更新的到期日期回复:
HTTP 304
Date: Fri, 16 Oct 2020 08:58:03 GMT
Expires: Sat, 16 Oct 2021 08:58:03 GMT
Age: 32066
不用细说,缓存可以概括为:
1. User agent sends request to server
2. Server responds resource along with "Last-Modified" date
3. Next time same resource is requested, browser will use "Last-Modified" date (aka validator) to check if resource is stale or not
3.1 If resource is not stale, it will be served from cache
3.2 If resource is stale, browser will use "Last-Modified" date in header and **send conditional get** to server
3.2.1 server can resource and send HTTP 200 is resource is updated
3.2.2 In case resource is not modified, server will send HTTP 304 along with updated `Expiry` date
3. 为什么它以前有效?
老实说,我不确定为什么它以前有效。可能有多种原因:
  • 可能是您的浏览器缓存很旧并且 Last-Modified 具有旧值由于从您的用户代理发送了条件获取请求并且服务器返回更新的缓存资源的 header Last-Modified缓存资源上的日期( Expires 响应头)。
  • 可能是浏览器禁用了缓存(隐身模式或明确使用无缓存)
  • 可能是服务器之前不支持缓存,没有发送Last-Modified作为回应
    等等。

  • 引用:
  • https://web.dev/http-cache/
  • https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
  • https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
  • 关于http - 缓存控制不返回 304,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64343610/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com