我试图了解“状态304未修改”和“200(来自缓存)”之间究竟有什么区别
我在上次更改的javascript文件上获得了304。为什么会这样? 谢谢你的帮助。
答案 0 :(得分:3)
https://sookocheff.com/post/api/effective-caching/是围绕这两个HTTP状态代码形成所需理解的绝佳来源。
仔细阅读后,我有了这个理解
在典型用法中,当检索到URL时,Web服务器将返回资源的当前表示及其对应的ETag值,该值放在HTTP响应头“ETag”字段中。然后,客户端可以决定缓存该表示及其ETag。稍后,如果客户端想要再次检索相同的URL资源,它将首先确定URL的本地缓存版本是否已过期(通过Cache-Control和Expire头)。如果URL尚未过期,它将检索本地缓存资源。如果确定URL已过期(过时),则客户端将联系服务器并在“If-None-Match”字段中将其先前保存的ETag副本与请求一起发送。 (来源:https://en.wikipedia.org/wiki/HTTP_ETag)
但是,即使将来设置资产的到期时间,浏览器仍然可以根据“Vary”标头使用ETag到达服务器以进行条件GET。有关“各种”标题的详细信息:https://www.fastly.com/blog/best-practices-using-vary-header/
答案 1 :(得分:0)
" 200(来自缓存)"表示浏览器为发出的请求找到了缓存的响应。因此,它不是通过网络调用从远程服务器获取该资源,而是简单地使用了缓存的响应。
现在这些缓存的响应具有与之相关的生命周期。随着时间的推移,回复可能会变得陈旧。如果不允许这些服务过时(请参阅section 4.2.4 - RFC7234),浏览器需要联系远程服务器并验证这些缓存的响应是否仍然有效。 304
响应状态代码是服务器'让浏览器知道响应没有改变并且仍然有效的方法。
如果浏览器收到304
响应,则可以"清新"相关的陈旧回应。并且可以再次从浏览器缓存中提供对资源的后续请求,而无需使用远程服务器进行检查(直到响应再次变为陈旧)。
答案 2 :(得分:-1)
304修改
“未修改304”表示文件自指定版本以来未被“If-Modified-Since”或“If-None-Match”修改。
200 OK
这是HTTP请求有效时的响应。 GET请求将包含与文件相关的内容。 POST请求将包含保存操作结果的内容。
快乐的编码!
Lyfe