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

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

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

200 200(caching)304

由Google的“网页速度”。

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

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

我不明白为什么差异。

更新

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

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

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

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

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

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

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

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

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

这也使我很久了。 我要validation的第一件事是,你不是通过点击刷新button重新加载页面,这将始终发出一个有条件的资源请求,并将返回许多页面元素的304s。 相反,进入url栏,select页面,然后按回车,就好像刚刚input了相同的url,这会更好地指示正在caching的内容。 本文很好地解释了有条件请求和无条件请求之间的区别以及刷新button如何影响它们: http : //blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical-information-about-有条件的HTTP请求和最刷新button.aspx

HTTP 304是“未修改”。 你的networking服务器基本上是告诉浏览器“这个文件自你上次请求以来没有改变”。 而HTTP 200告诉浏览器“这是一个成功的响应” – 当您的浏览器第一次访问文件或第一次访问修改的副本时应该返回。

有关状态码的更多信息,请查看http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

304是未修改的。 我在我的媒体文件(如CSS和JS)中获得了很多代码。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5