ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浏览器缓存机制

2021-05-06 10:33:43  阅读:118  来源: 互联网

标签:Control 缓存 浏览器 请求 标识 服务器 机制


浏览器缓存

分担服务器压力,加快加载速度

缓存机制

  • 响应报文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.

image

其他问题

服务器其他返回

400:语义有误,请求无法被理解。
415;实体不被服务器支持,所以请求被拒绝。

硬盘缓存和内存缓存

js大部分在内存缓存、css在硬盘缓存。

浏览器先找内存缓存,没有的话找硬盘缓存。关闭进程,内存缓存就没了,但是硬盘缓存还会在。

浏览器缓存种类

  1. Http缓存
  2. Cookie
  3. Localstorage(本地缓存)
  4. Sessionstorage
  5. cacheStorage(ServiceWorker规范中定义的,保存没饿过ServiceWorker申明的Cache对象)

标签:Control,缓存,浏览器,请求,标识,服务器,机制
来源: https://www.cnblogs.com/zhangjw83/p/14734030.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有