浏览器要怎么样才能触发强缓存命中和协商缓存?

发布于 2022-09-02 09:46:01 字数 1051 浏览 18 评论 0

在伯乐在线上看到一篇文章:浏览器缓存知识小结及应用 ,连接:http://web.jobbole.com/84888/
博主总结到:
浏览器缓存基本认识分为强缓存和协商缓存:
1)浏览器在加载资源时,先根据这个资源的一些http header判断它是否命中强缓存,强缓存如果命中,浏览器直接从自己的缓存中读取资源,不会发请求到服务器。比如某个css文件,如果浏览器在加载它所在的网页时,这个css文件的缓存配置命中了强缓存,浏览器就直接从缓存中加载这个css,连请求都不会发送到网页所在服务器;

2)当强缓存没有命中的时候,浏览器一定会发送一个请求到服务器,通过服务器端依据资源的另外一些http header验证这个资源是否命中协商缓存,如果协商缓存命中,服务器会将这个请求返回,但是不会返回这个资源的数据,而是告诉客户端可以直接从缓存中加载这个资源,于是浏览器就又会从自己的缓存中去加载这个资源;

3)强缓存与协商缓存的共同点是:如果命中,都是从客户端缓存中加载资源,而不是从服务器加载资源数据;区别是:强缓存不发请求到服务器,协商缓存会发请求到服务器。

4)当协商缓存也没有命中的时候,浏览器直接从服务器加载资源数据。

强缓存:(200 from cache)
协商缓存:(304 not modified)

但是我去百度首页看了下,发现并不是这样的,当请求响应中cache-control还没有过期时,并没有命中强缓存,而是命中协商混存。如下图,截得百度的:
图片描述

图片描述

这资源没有过期吧?谁能给解释下为啥没有命中强缓存啊?或者我自己哪里理解错了,跪谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

好久不见√ 2022-09-09 09:46:01

同学我觉得你的理解没有问题,只是文章没有看到最后浏览器行为对缓存的影响当f5刷新网页时,跳过强缓存,但是会检查协商缓存。同学是不是忽略了这一点。

埋葬我深情 2022-09-09 09:46:01

首先网上的文章错中复杂,我没看你的那篇博文,但我发现你总结的是错的。

在开始之前你应该去看看http状态码200和304分别代表什么,前者是正常从服务器加载资源(也就是无缓存),后者是发送一个etag和last_modified到服务器,验证是否使用客户端缓存,然后服务器返回304代码(也就是说304就是客户端缓存)

所以实验结果是正确的。

返回再看看就知道了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文