浏览器缓存Cache

news/2024/11/24 20:53:10/

首先缓存的优点是:缓解服务端压力;快。

强缓存和协商缓存

强缓存是从本地缓存数据表中去取资源,不向服务端发送请求;协商缓存意思是每次使用缓存前都要和服务端进行确认。
从Response Header的Cache-Control的值看缓存规则(HTTP/1.1):
max-age=xxx 过期时间(重要),过期了走协商缓存(expire是HTTP1.0的产物,采用绝对时间,已废弃)
no-cache:不进行强缓存(重要),走协商缓存
no-store 不强缓存,也不协商缓存,基本不用
public:浏览器和代理服务器都可以缓存
private:资源只能给浏览器缓存,不能给代理服务器缓存
强缓存
强缓存步骤
在这里插入图片描述
在这里插入图片描述

  • 第一次请求 a.js ,缓存表中没该信息,直接请求后端服务器。
  • 后端服务器返回了 a.js ,且 http Response Header中 cache-control 为 max-age=xxxx,所以是强缓存规则,存入缓存表中。
  • 第二次请求 a.js ,缓存表中是max-age, 那么命中强缓存,然后判断是否过期,如果没过期,直接读缓存的a.js,如果过期了,则执行协商缓存的步骤了。

max-age=0和no-cache的区别:max-age是进行强缓存,但过期了,走协商缓存;no-cache是直接走协商缓存。两者效果一样。
协商缓存
协商缓存无论如何都是会向服务器发送请求的,只不过,资源未更改时,返回的只是header信息,所以size很小;而资源有更改时,还要返回body数据,所以size会大。
触发条件:1,强缓存(max-age)过期;2,Cache-Control值为no-cache(不强缓存)
每次http返回来 response header 中的 (每个文件都有一个,改动文件时ETag会变)和 Last-Modified(文件的修改时间),在下次请求时在 request header 就把这两个标识带上(但是名字变了ETag–>If-None-Match,Last-Modified–>If-Modified-Since ),服务端把带过来的标识,资源目前的标识,进行对比,然后判断资源是否更改了。 如果资源没更改,返回304,浏览器读取本地缓存;如果资源有更改,返回200,返回最新的资源和最新的标识。

协商缓存步骤:
在这里插入图片描述
在这里插入图片描述
有了Last-Modified,为什么还要有ETag?
主要是为了解决几个Last-Modified比较难解决的问题:

  • 一些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变了修改时间),这个时候我们并不希望客户端认为这个文件被修改了,而重新GET;
  • 某些文件修改非常频繁,比如在以下的时间内进行修改,(比方说1s内修改了N次),Last-Modified能检查到的粒度是s级的,这种修改无法判断(或者说UNIX记录MTIME只能精确到秒);
  • 某些服务器不能精确的得到文件的最后修改时间。

用户行为对缓存的影响?
F5 会跳过强缓存规则,直接走协商缓存;Ctrl+F5 ,跳过所有缓存规则,和第一次请求一样,重新获取资源。

为什么很多站点第二次打开速度会很快?

如果第二次页面打开很快,主要原因是第一次加载页面过程中,缓存了一些耗时的数据。
那么,哪些数据会被缓存呢?从上面介绍的核心请求路径可以发现,DNS 缓存和页面资源缓存这两块数据是会被浏览器缓存的。DNS 缓存主要就是在浏览器本地把对应的 IP 和域名关联起来。
简要来说,很多网站第二次访问能够秒开,是因为这些网站把很多资源都缓存在了本地,浏览器缓存直接使用本地副本来回应请求,而不会产生真实的网络请求,从而节省了时间。同时,DNS 数据也被浏览器缓存了,这又省去了 DNS 查询环节。

如果一个页面的网络加载时间过久,你是如何分析卡在哪个阶段的?

1 首先猜测最可能的出问题的地方,网络传输丢包比较严重,需要不断重传。然后通过ping curl看看对应的时延高不高。
2 然后通过wireshake看看具体哪里出了问题。
3 假如别人访问很快,自己电脑很慢,就要看看自己客户端是否有问题了。


http://www.ppmy.cn/news/507024.html

相关文章

各种浏览器的缓存文件的位置和修改缓存目录的方法

一、手动清空缓存1、Opera清除Opera浏览器的缓存的方法:打开Opera,工具->首选项->高级->历史->点击立即清空按钮就可以清除Opera浏览器的缓存。2、IE浏览器的缓存清空打开IE浏览器,工具->Internet选项->常规->Internet临…

Android 获取cache缓存的目录路径

转发请备注原文地址:https://www.niwoxuexi.com/blog/android00/article/224.html Android开发中,有时需要知道cache缓存的路径。我写了一个静态类,供大家能参考 public class CommonUtil {/*** 获取cache路径** param context* return*/pu…

cache是什么文件?

转自:https://zhidao.baidu.com/question/27865855.html 通常人们所说的Cache就是指缓存SRAM。 SRAM叫静态内存,“静态”指的是当我们将一笔数据写入SRAM后,除非重新写入新数据或关闭电源,否则写入的数据保持不变。 由于CPU的速度…

Vue中的cache缓存,原来是这样啊

上篇文章写了arrify转数组,无论传给arrify什么样的数据都是返回一个数组,相对而言还是比较简单的。这篇文章分享一个比较有意思的东西,那就是Vue中如何实现cache缓存的。提前揭晓答案–闭包。下面我们就来手写一个吧。第一步,毫无…

各种浏览器的cache文件夹

Windows xp firefox: c:\Documents and Settings\administrator\Application Data\Mozilla\Firefox\Profiles chrome: C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Chrome\User Data\Default\Cache IE:(360等国内浏览器) …

DNDC模型四:土壤碳储量与作物产量、农田减排潜力分析

查看原文>>>双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的实践应用 由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会…

二层网络和三层网络的区别

大家经常可以听到二层网络、三层网络的说法,我们这里提到的二层、三层是按照逻辑拓扑结构进行的分类,并不是ISO七层模型中的数据链路层和网络层,而是指核心层、汇聚层和接入层。这三层都部署的就是三层网络结构,二层网络结构没有汇…

三层交换机和二层交换机区别是什么

播报文章 三层交换机和二层交换机区别是什么 三层交换机和二层交换机区别:1、 二层交换机工作在数据链路层,三层交换机工作在网络层;2、二层交换机基于MAC地址访问,只做数据的转发,并且不能配置IP地址,而三…