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

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

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

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

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

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

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

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

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


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


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

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

所以实验结果是正确的。

返回再看看就知道了

【热门文章】
【热门文章】