浏览器缓存策略

DNS, 全称 Domain Name System ,即域名系统。当用户输入url后,该数据库可映射出对应的IP地址,使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

www.dnscache.com (域名) - DNS解析 -> 11.222.33.444 (IP地址)

浏览器缓存,可用于优化用户体验,无论在节省带宽、提高加载和渲染速度、减少网络阻塞,以及提高用户体验上,都发挥着很重要的作用。

浏览器的缓存过程如下:
1. 开始加载,域名解析,DNS缓存
2. 本地缓存(memory缓存)
3. Http缓存(强缓存和协商缓存)
4. 服务端缓存(cdn缓存)

在这里插入图片描述

DNS缓存:浏览器在第一次获取到IP地址后,会将其缓存起来。下次相同域名再次发起请求时,浏览器会先查找本地缓存,如果缓存有效,则会直接返回该IP地址,否则会继续开始寻址之旅。
memory缓存:资源缓存到内存中,memory cache 只是个“短期存储”。当数据量过大,即使网页不关闭,缓存依然会失效。memory cache 机制保证了一个页面中如果有两个相同的请求 (例如两个 src 相同的 ,两个 href 相同的 )都实际只会被请求最多一次,避免浪费。
HTTP缓存,分为强制缓存和协商缓存

对于强缓存,控制字段为Expires和Cache-Control,其中Cache-Control优先级比Expires高。浏览器再向服务器请求资源时,首先判断是否命中强缓存,再判断是否命中协商缓存!
强缓存:
Expires
该字段是 http1.0 时的规范,它的值为一个绝对时间的 GMT 格式的时间字符串,比如 Expires:Mon,18 Oct 2066 23:59:59 GMT。这个时间代表着这个资源的失效时间,在此时间之前,即命中缓存。这种方式有一个明显的缺点,由于失效时间是一个绝对时间,所以当服务器与客户端时间偏差较大时,就会导致缓存混乱。
协商缓存:
一旦发现缓存无效,它并不会简单的把缓存删除,而是抱着一丝希望,想问问服务器,我这个缓存还能继续使用吗?这里的 header 中的信息指的是 Last-Modify/If-Modify-Since 和 ETag/If-None-Match.
在这里插入图片描述
Last-Modify/If-Modify-Since
浏览器第一次请求一个资源的时候,服务器返回的 header 中会加上 Last-Modify,Last-modify 是一个时间标识该资源的最后修改时间。当浏览器再次请求该资源时,request 的请求头中会包含 If-Modify-Since,该值为缓存之前返回的 Last-Modify。服务器收到 If-Modify-Since 后,根据资源的最后修改时间判断是否命中缓存。如果命中缓存,则返回 304,并且不会返回资源内容,并且不会返回 Last-Modify。

缺点:
短时间内资源发生了改变,Last-Modified 并不会发生变化。
周期性变化。如果这个资源在一个周期内修改回原来的样子了,我们认为是可以使用缓存的,但是 Last-Modified 可不这样认为,因此便有了 ETag。Etag/If-None-Match 返回的是一个校验码。ETag 可以保证每一个资源是唯一的,资源变化都会导致 ETag 变化。服务器根据浏览器上送的 If-None-Match 值来判断是否命中缓存。
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值