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

标签 http caching httpwebrequest http-status-codes cache-control

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

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

200 200(缓存) 304

Google 的“Page Speed”。

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

我多次刷新页面(但没有清除我的缓存),我的 favicon.ico 和一些图像似乎总是 status=200(缓存),而其他一些图像是 http 状态 304。

我不明白为什么会这样。

更新:

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

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

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

最佳答案

代码为“200(缓存)”的项目是直接从您的浏览器缓存中实现的,这意味着对项目的原始请求返回时带有 header ,表明浏览器可以缓存它们(例如, future 日期 ExpiresCache-Control: max-age header ),并且在您触发新请求时,那些缓存的对象仍存储在本地缓存中并且尚未过期。

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

为了获得最佳网络性能,您最好为所有 Assets 设置一个远期 Expires:Cache-Control: max-age header ,然后当需要更改 Assets 时,更改 Assets 的实际文件名或将版本字符串附加到对该 Assets 的请求。这消除了发出任何请求的需要,除非 Assets 已从缓存中的版本明确更改(不需要 304 响应)。谷歌有 more details on correct use of long-term caching .

关于http - HTTP 状态代码 200(缓存)与状态代码 304 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665082/

相关文章:

javascript - 发送/接收图像以响应 http

php - 在 Controller 中获取 HTTP 动词

python - 使用 Django 模型的 post_save 进行手动缓存失效 : do foreign keys trigger save()?

c# - HttpWebRequest 截断带有非英文符号的 URL

jquery - 如何将事件绑定(bind)到 AHAH 请求的 HTML 中的链接组

javascript 代码在浏览器中不起作用?

javascript - Angular:没有 Http 的提供者

c# - System.Net.HttpWebResponse.GetResponseStream() 在 WebException 中返回截断的正文

php - 我如何知道是否启用了任何 PHP 缓存?

java - Java中的多线程对象→对象缓存映射?