本文主要是介绍浏览器缓存机制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
浏览器缓存
分担服务器压力,加快加载速度
缓存机制
- 响应报文HTTP头有缓存标识。浏览器第一次请求–>服务器响应报文–>看响应报文HTTP头中缓存标识,决定是否缓存。
- 浏览器第二次请求–>先访问浏览器缓存–>若没有则再次发起HTTP请求到服务器
强制缓存
是HTTP请求的前半段:向浏览器缓存查找该请求结果。成功返回200状态码。
有三种结果:
- 不存在缓存结果和缓存标识,向服务器发起请求。
- 存在缓存结果和标识但是已经失效,向服务器发起协商缓存。
- 存在缓存结果和缓存标识,没有失效,成功提取到资源。
强制缓存的控制条件
服务器将缓存规则放入HTTP响应报文头中,返回给浏览器。
1 Expires
值为缓存的到期时间(HTTP1.0)
发送请求,进行强制缓存时,对比客户端的时间和Expires的值,没到期就直接提取缓存。
2 Catche-Control
HTTP(1.1)优先级高于Expires
- Catche-Control:public:所有内容都将被缓存(客户端和代理服务器都可缓存)
- Catche-Control:private:所有内容只有客户端可以缓存,Cache-Control的默认取值
- Catche-Control:no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
- Catche-Control:no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
- Catche-Control:max-age=xxx (xxx 是数字):缓存内容将在xxx秒后失效
协商缓存
若强制缓存里,内容失效,则发起协商缓存。根据缓存标识,决定是否继续使用缓存。返回304,说明资源无更新,继续使用缓存中的内容。返回200,说明更新了,返回新内容和新的缓存标识。
协商缓存的标识
标识分别是存在在响应头(1)和发送请求的头(2)里,成对存在的。请求后,服务器发的缓存更新状态是1,把1保存在缓存里。请求时2取目前1的值交给服务器验证
Last-Modified/If-Modified-Since
是一个时间结点,最新被修改的时间结点,Last-Modified为1,If-Modified-Since为2
浏览器看到2,就会发起一个验证,看是返回304还是返回200。
Etag/If-None-Match
是一个标识符,每次更新有一个新的标识符。Etag是1,If-None-Match为2.
其他问题
服务器其他返回
400:语义有误,请求无法被理解。
415;实体不被服务器支持,所以请求被拒绝。
硬盘缓存和内存缓存
js大部分在内存缓存、css在硬盘缓存。
浏览器先找内存缓存,没有的话找硬盘缓存。关闭进程,内存缓存就没了,但是硬盘缓存还会在。
浏览器缓存种类
- Http缓存
- Cookie
- Localstorage(本地缓存)
- Sessionstorage
- cacheStorage(ServiceWorker规范中定义的,保存没饿过ServiceWorker申明的Cache对象)
这篇关于浏览器缓存机制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!