25

我试图了解“状态 304 未修改”和“200(来自缓存)”之间究竟有什么区别 这是屏幕截图

我在上次更改的 javascript 文件上收到 304。为什么会这样?感谢您的帮助。

4

3 回答 3

5

https://sookocheff.com/post/api/effective-caching/是围绕这 2 个 HTTP 状态代码形成所需理解的绝佳来源。

仔细阅读后,我有了这样的理解

在典型用法中,当检索到 URL 时,Web 服务器将返回资源的当前表示形式及其对应的 ETag 值,该值位于 HTTP 响应标头“ETag”字段中。然后,客户端可以决定缓存该表示及其 ETag。稍后,如果客户端要再次检索相同的 URL 资源,它会首先确定该 URL 的本地缓存版本是否已过期(通过 Cache-Control 和 Expire 标头)。如果 URL 没有过期,它将检索本地缓存的资源。如果它确定 URL 已过期(过时),则客户端将联系服务器并将其先前保存的 ETag 副本与请求一起发送到“If-None-Match”字段中。(来源:https ://en.wikipedia.org/wiki/HTTP_ETag )

但是,即使将来设置了资产的到期时间,浏览器仍然可以根据“Vary”标头使用 ETag 访问服务器以进行条件 GET。“变化”标题的详细信息:https ://www.fastly.com/blog/best-practices-using-vary-header/

于 2018-01-03T10:03:30.857 回答
0

“200(来自缓存)”表示浏览器为所发出的请求找到了缓存响应。因此,它没有进行网络调用以从远程服务器获取该资源,而是简单地使用了缓存的响应。

现在,这些缓存的响应具有与之相关的生命周期。随着时间的推移,响应可能会变得陈旧。如果这些服务不允许陈旧(参见4.2.4 - RFC7234 部分),浏览器需要联系远程服务器并验证这些缓存的响应是否仍然有效。响应状态码是服务器让浏览器304知道响应没有改变并且仍然有效的方式。

如果浏览器收到304响应,它可以“刷新”相关的陈旧响应。并且随后对资源的请求可以再次从浏览器缓存中提供,而无需与远程服务器进行检查(直到响应再次变得陈旧)。

于 2018-05-23T11:57:58.027 回答
-2

304 Modified
A 304 Not Modified 表示文件自“If-Modified-Since”或“If-None-Match”指定的版本以来没有被修改过。

200 OK
如果 HTTP 请求有效,这是您将得到的响应。GET 请求将包含与文件相关的内容。POST 请求将包含保存操作结果的内容。

快乐编码!
生命周期

于 2017-10-08T01:10:21.047 回答