HTTP状态码200(缓存)与状态码304之间有什么区别?

我正在使用Google的“Page Speed”插件来访问我的网站。

我的页面上的某些组件被指示为HTTP状态:

200 200(缓存)304

由谷歌的“网页速度”。

我感到困惑的是200(缓存)和304之间的区别。

我刷新了多次页面(但还没有清除我的缓存),它总是好像我的favicon.ico和几张图片的状态= 200(缓存),而其他一些图片是http状态304。

我不明白为什么差异。

更新

使用Google的“Page Speed”,我会收到http://example.com/favicon.ico以及http://cdn.example.com/js/ga.js的“200(缓存)”

但是,我收到http://cdn.example.com/js/combined.min.js的http状态“304”

我不明白为什么我有两个JavaScript文件位于同一目录/ js /中,一个返回http状态304,另一个返回200(缓存)状态码。


代码为“200(缓存)”的项目是直接从浏览器缓存中完成的,这意味着这些项目的原始请求返回了标题,指示浏览器可以缓存它们(例如,将来更新的ExpiresCache-Control: max-age标题),并且在您触发新请求时,这些缓存的对象仍保存在本地缓存中,但尚未过期。

另一方面,服务器在浏览器检查自从缓存的最后一个版本以来是否修改了文件(答案为“否”)之后的响应。

对于大多数最佳Web性能,您最好为所有资产设置一个远期Expires:Cache-Control: max-age标题,然后在需要更改资产时更改资产的实际文件名或附加值版本字符串来请求该资产。 这消除了对任何请求的需要,除非资产已经从缓存中的版本明确改变(不需要304响应)。 雅虎 有更多的缓存相关的性能指导方针,其中包括确保ETag配置正确。


200(缓存)意味着Firefox只是使用本地缓存版本。 这是最快的,因为没有向Web服务器发出请求。

304表示Firefox正在向Web服务器发送“If-Modified-Since”条件请求。 如果该文件自浏览器发送日期以来未更新,则Web服务器将返回一个304响应,该响应基本上告诉Firefox使用其缓存版本。 它的速度不如200(缓存)快,因为请求仍然发送到Web服务器,但服务器不必发送文件的内容。

对于最后一个问题,我不知道为什么同一目录中的两个JavaScript文件返回不同的结果。


这也让我感到很长时间了。 我要验证的第一件事是,您不通过单击刷新按钮来重新加载页面,该按钮将始终发出资源的有条件请求,并将为许多页面元素返回304。 相反,进入url栏,选择页面并按回车键,就好像你刚刚输入了相同的URL,这会给你一个更好的指示什么是正确缓存。 本文很好地解释了有条件请求和无条件请求之间的区别以及刷新按钮如何影响它们:http://blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical-information-about-有条件的HTTP请求和最刷新button.aspx

链接地址: http://www.djcxy.com/p/7957.html

上一篇: What is the difference between HTTP status code 200 (cache) vs status code 304?

下一篇: How do I use the Jersey JSON POJO support?