美文网首页
浏览器缓存

浏览器缓存

作者: 翔子丶 | 来源:发表于2022-11-01 09:31 被阅读0次

HTTP协议

  • 请求报文:请求行、请求报头、请求正文

  • 响应报文:相应行、响应报头、响应正文

  • 首部字段:报头中一些列的属性,如

    Content-Type: text/javascript
    

    首部字段包含四种类型:

    • 通用首部字段(请求报头和响应报头都用到的首部)
    • 请求首部字段(请求报头用到的首部)
    • 响应首部字段(响应报头用到的首部)
    • 实体首部字段(针对请求报头和响应报头实体部分使用的首部)

与缓存有关的首部字段名

和强缓存有关的首部字段名主要是:Expires和Cache-control

  • Expires

    定义缓存过期的绝对时间,属于实体首部字段

    Expires: Wed, 11 May 2022 03:50:47 GMT
    

    因为Expires设置的缓存过期时间是一个绝对时间,受客户端时间的影响而变得不精准

  • Cache-control

    定义控制缓存的行为,可以组合使用,属于通用首部字段

    Cache-Control: max-age:3600, s-maxage=3600, public
    Cache-Control: no-cache
    
    • max-age:缓存过期相对时间,单位秒,与Expires同时出现时,max-age优先级高
    • public:客户端和代理服务器都可缓存
    • private:客户端缓存、代理服务器不进行缓存,只有发出请求的浏览器才进行缓存,而一些中间的http代理服务器不进行缓存
    • no-cache:请求首部中出现时,表示告知服务器不直接使用缓存,要求向源服务器发起请求;响应首部出现时,表示客户端可以缓存资源,但每次使用缓存资源前,必须向服务器确认其有效性
    • no-store:不进行任何缓存

和协商缓存相关的首部字段名:Last-Modified、If-Modified-Since、Etag、If-None-Match

  • Last-Modified与If-Modified-Since

    Last-Modified响应首部字段,浏览器第一次收到服务端资源的Last-Modified值后,会将这个值存储,下次继续访问此资源时,会携带If-Modified-Since请求首部发送到服务器,用于验证资源是否过期

    Last-Modified: Fri , 14 May 2021 17:23:13 GMT
    If-Modified-Since: Fri , 14 May 2021 17:23:13 GMT
    

    如果在If-Modified-Since字段指定的事件后发生更新,服务器会将更新的资源发送到浏览器,并返回最新的Last-Modified值;如果未更新,则服务端会返回304 Not Modified状态码

  • Etag与If-None-Match

    类似于Last-Modified和If-Modified-Since,不同之处在于Last-Modified记录最后需改时间,而Etag代表资源的唯一性标识(资源是否发生改变),资源发生改变则Etag更新,两者同时存在时只有Etag会生效

    Etag: "29322-09SpAhH3nXWd8KIVqB10hSSz66"
    If-None-Match: "29322-09SpAhH3nXWd8KIVqB10hSSz66"
    
  • Etag和Last-Modified关系

    • Last-Modified精确到秒,一秒之内的内容修改Etag才能检测到
    • 内容不变,仅保存时修改时间会发生变化,此时如果使用Last-Modified时就不会走缓存
    • 相辅相成:Etag可以弥补Last-Modified判断的精确性问题,而Last-Modified对静态资源的修改,只需要判断修改时间,对比每次生成Etag来说会快很多

强缓存失效后,浏览器携带缓存标识(If-none-match或If-modified-since)向服务器发起请求,由服务器根据缓存标识决定是否使用缓存

网页缓存过程

当浏览器发起Http请求时获取资源时:

  1. 向浏览器缓存询问是否有缓存该资源的数据,有的话直接使用
  2. 没有时向服务器发起请求,获取资源
  3. 将获取到的资源存储在浏览器缓存中

Disk Cache(磁盘缓存)和Memory Cache(内存缓存)

  • Memory Cache从内存中直接读取,读取速度块,但一旦关闭Tab页,Memory Cache就被释放了,下次进还是Disk Cache
  • Disk Cache硬盘中的缓存,容量大,但读取速度慢
  • Memory Cache比Disk Cache更快原因在于,磁盘缓存会有些许耗时,而内存缓存是及时性的,不存在耗时
  • 浏览器会率先查找内存缓存,如果内存中存在则直接加载;不存在时会在磁盘中查找
  • 大文件不会存储在内存中
  • base64是一串字符串,随着页面渲染而加载,浏览器解析会损耗一定性能,浏览器为了节约渲染开销,会把base64的图片塞进内存

缓存新鲜度

缓存新鲜度用于判断缓存是否过期:缓存新鲜度 > 缓存使用期

缓存新鲜度 = max-age || (expires - date)

max-age存在时,缓存新鲜度直接等于它,缓存xxx秒,在这个时间段内都是新鲜的;而max-age不存在时,缓存新鲜度等于expires - date的值,expires绝对时间,表示缓存过期的时间,而date表示创建报文的日期时间(服务器返回新资源的时间),两者相减就可以计算出可以缓存的时间,即新鲜度

相关文章

  • 浏览器缓存(http缓存)

    浏览器缓存有两种:强制缓存和协商缓存 浏览器缓存机制 浏览器发送请求,会先从浏览器缓存中查找【请求结果】和【缓存标...

  • 缓存、cookie、token、session、localSto

    一、缓存分类 服务器端缓存(CDN缓存) 客户端缓存(浏览器缓存); 二、浏览器缓存 强缓存:浏览器在加载资源时,...

  • 协商缓存和强缓存

    浏览器缓存主要有两类:缓存协商和彻底缓存,也有称之为协商缓存和强缓存 浏览器缓存机制浏览器缓存(Brower Ca...

  • DSBD

    1.浏览器缓存 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识 强制缓存优先于协商缓存进...

  • HTTP缓存机制

    web缓存分为:数据库缓存、服务器缓存(代理服务器、cdn缓存)、浏览器缓存浏览器缓存分为:http缓存、inde...

  • HTTP 缓存控制

    Web 缓存 数据库缓存、服务器端缓存(代理服务器缓存、CDN 缓存)、浏览器(HTTP)缓存 浏览器缓存(本地储...

  • Web浏览器的缓存机制

    原文转载【Web缓存机制系列】2 – Web浏览器的缓存机制 浏览器端的缓存规则 对于浏览器端的缓存来讲,这些规则...

  • 浏览器缓存?优点?清除方法?

    ☆前端优化:浏览器缓存技术介绍 - 简书 浏览器缓存(适用于前端解决缓存问题) - 简书 js清除浏览器缓存问题的...

  • 浏览器缓存

    浏览器缓存 浏览器处理网页的方式 走到协商缓存会返回 304 走到强缓存会返回 200 合理使用浏览器缓存 页面连...

  • 《白帽子讲web扫描》笔记

    2.9 DNS本地缓存 DNS本地缓存:一是浏览器缓存,二是系统缓存。在浏览器访问域名时优先访问浏览器缓存,一旦未...

网友评论

      本文标题:浏览器缓存

      本文链接:https://www.haomeiwen.com/subject/lyjrtdtx.html