Internet Explorer与Chrome缓存对比

5
基本上,我正在尝试通过启用缓存使我的网站更加用户友好。为了测试我的进展,我正在使用Chrome和IE中的开发者工具,最终目标是将对Web服务器的调用次数最小化。当Chrome缓存某些内容时,开发者工具将给出一个200(已缓存)的请求响应。另一方面,IE将始终向服务器发送一个小请求,并在从其缓存中读取之前获得304响应
哪个浏览器正在正确遵循HTTP协议?如果答案是Chrome,那么我该如何消除IE中不必要的304调用?

这取决于您的服务器发送的缓存标头,以确定哪个浏览器的行为是正确的。如果您在问题中添加一个示例,会非常有帮助。话虽如此,众所周知,Chrome在缓存方面比其他浏览器更加积极。 - Max
在IE 11中遇到了同样的问题。所有静态内容都通过304响应在IE 11中获取,但是Chrome访问相同的站点时将所有静态内容返回为200(来自缓存)。我希望IE 11能像Chrome一样表现,但无论头部中有什么过期信息,IE 11都坚持执行304。 - Tom Regan
2个回答

3

明确一点:

  • 304 - 服务器响应,表示资源自上次请求以来未被修改
  • 200 - 服务器响应,表示资源已成功返回
  • 200(cached) - 伪浏览器响应,表示该项从本地缓存加载

根据页面的重新加载/刷新方式,特别是对于IE,也有微小的差异。 (您是点击刷新按钮还是在URL栏上按Enter键?)请参见以下内容:


随机开始工作了。我注意到使用F5会发送304请求,而在地址栏中按回车键将使用缓存。发生的情况是Chrome会正确地缓存和提交19个请求,而IE则始终执行304并对我的测试页面进行约28个请求。现在IE实际上只进行了14个请求。除了可能一直按F5之外,我不知道为什么它突然开始工作了。 - Neve12ende12

2

IE在缓存方面有一些特殊行为。可以说不是错误的,但与其他浏览器不同。有关更多信息,请参见此帖子

一种技术(并不遵循最佳实践!)是确保您的到期日期在未来的健康时间内,并且不向IE发送上次修改的时间戳(last-modified)。然后IE将不会发送if-modified-since请求,而只会在缓存过期时发送请求。在这种情况下,它将获得一个新文档(200),而不是304。这个新文档应该将到期日期设置在未来的健康时间内,从而通过使用具有未来到期日期的缓存版本消除许多请求。

if-modified-since请求是304响应的核心。如果文档自IE发送时间以来没有被修改,则304响应是正确的。问题在于,如果您的到期时间在过去,IE将始终进行此请求(每次都调用服务器!)..并且永远不会获得新的到期日期。因此,它将继续发出相同的请求,您的服务器将继续回复相同的304响应。

我猜Chrome对于您来说在访问服务器方面不是问题。如果有问题,请更好地解释您在两个浏览器中看到的请求数量和流程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接