美文网首页
浏览器缓存(http缓存)

浏览器缓存(http缓存)

作者: 糖糖不加糖_ | 来源:发表于2021-09-06 16:16 被阅读0次
第一次发起请求 协商缓存请求图

浏览器缓存有两种:强制缓存和协商缓存

浏览器缓存机制
  • 浏览器发送请求,会先从浏览器缓存中查找【请求结果】和【缓存标识】
  • 浏览器接收数据,会将【请求结果】和【缓存标识】存储在浏览器缓存中
强制缓存(客户端判断规则)

向浏览器缓存中查找请求结果,根据【缓存规则】决定是否使用该结果。

  • 不存在结果和缓存标识,向服务器发请求
  • 存在结果和缓存标识,结果已失效,使用【协商缓存】
  • 存在结果和缓存标识,结果未失效,直接使用(不请求服务器了)
协商缓存(服务器端判断规则)

强制缓存失效后,携带缓存标识请求服务器,服务器根据缓存标识判断是否使用缓存

  • 协商缓存生效,返回304
  • 不生效,返回200和结果
浏览器缓存规则

当浏览器向服务器发送请求的时候,服务器会将缓存规则放入HTTP响应的报文的HTTP头中和请求结果一起返回给浏览器(ps:下文说的时间点均为类似:Sat Aug 14 2021 11:01:52,秒级)

强制缓存的缓存规则

两个字段:Expires和Cache-Control,优先级:Cache-Control > Expires,客户端比较时间

Expires:HTTP/1.0,返回值为【到期时间点】,再次请求,客户端的时间< Expires,直接用缓存(ps:客户端与服务器端时间可能存在误差,出问题)

Cache-Control:HTTP/1.1,有以下字段

  • public:所有内容都将被缓存(客户端和代理服务器都可缓存)
  • private:所有内容只有客户端可以缓存,Cache-Control的默认取值
  • no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
  • no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
  • max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效。【时间段】,即再次发起请求,xxx秒内直接使用缓存
协商缓存的缓存规则

Last-Modified / If-Modified-Since 和 Etag / If-None-Match,优先级Etag > Last-Modified,服务器比较时间
Last-Modified(服务端返回客户端) / If-Modified-Since(客户端传入服务端):两个值相同,表示:资源文件在服务器最后被修改的时间【时间点】。

  • 大于If-Modified-Since,返回资源结果
  • 小于If-Modified-Since,返回304,代表资源无更新,可继续使用缓存文件

Etag(服务端返回客户端) / If-None-Match(客户端传入服务端),两个值相同,为当前资源文件的一个唯一标识(由服务器生成)

  • 与If-None-Match一致,返回304
  • 与If-None-Match不一致,返回资源结果

Etag什么时候用
雅虎禁用了Etag:因为ETag的值和服务器有关,那么对于同样的文件,可能下次请求的时候是发给不同的服务器,结果也会重新发送数据,所以就会影响网页加载速度,增加服务器的压力(但Last-Modified也与服务器有关)
主要解决的问题:

  • 一些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变的修改时间)
  • 某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了N次),If-Modified-Since能检查到的粒度是s级的,这种修改无法判断
  • 某些服务器不能精确的得到文件的最后修改时间
浏览器的缓存存放位置

浏览器的每个tab都是一个进程
两个缓存的地方from memory cache(内存缓存)from disk cache(硬盘缓存),读取顺序为memory > disk

内存缓存memory
  • 会将编译解析后的文件存放在进程中,占据一定的内存资源
  • 进程关闭,内存会被清空(即关闭浏览器tab标签,缓存就没了,要重新加载)
硬盘缓存disk
  • 缓存写入硬盘文件中
  • 读取时,对硬盘I/O操作,重新解析缓存内容

相关文章

  • 一文读懂http缓存(超详细)

    前端缓存 前端缓存可分为两大类:http缓存和浏览器缓存。我们今天重点讲的是http缓存,所以关于浏览器缓存大家自...

  • HTTP缓存原理

    什么是HTTP缓存 HTTP缓存通常指浏览器缓存,基于HTTP中header字段实现HTTP缓存分为强缓存和协商缓...

  • 前端缓存

    前端缓存 前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务...

  • 浏览器缓存和服务器缓存

    一、浏览器缓存 浏览器缓存即http缓存;浏览器缓存根据是否需要向服务器重新发起HTTP请求将缓存过程分为两个部分...

  • HTTP缓存机制

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

  • HTTP 缓存控制

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

  • 关于浏览器缓存---强制缓存和对比缓存

    浏览器缓存主要指HTTP的缓存--即协议层,协议层缓存可以被分为强制缓存和对比缓存。 强制缓存 强制缓存时,浏览器...

  • 前端缓存详解

    一、前言 前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务...

  • 【转载】彻底理解浏览器的Http缓存机制

    转自:彻底理解浏览器的缓存机制(http缓存机制) 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是...

  • 前端缓存的理解 或者 前端数据持久化的理解(强制缓存、协商缓存)

    前端缓存分为HTTP缓存和浏览器缓存 其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置;而...

网友评论

      本文标题:浏览器缓存(http缓存)

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