文章目录

  • 一、强制缓存
    • 1.1、ExPires
    • 1.2、Cache-Control
  • 二、协商缓存
    • 2.1、last-modified
    • 2.2、etag

浏览器缓存(Browser Caching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览。

  • 浏览器缓存包含 : HTTP 缓存、indexDB、cookie、localstorage 、sessionStorage
  • 而HTTP缓存有:强制缓存 和 协商缓存
  • 流程图:
  • 浏览器缓存的优点:
1. 减少了冗余的数据传送,减少带宽
2. 减少了服务器的负担,大大提升了网站的性能
3. 加快了客户端加载网页的速度

一、强制缓存

强制缓存:不会向服务器发送请求,直接从缓存中读取资源

  • 当浏览器向服务器请求数据的时候,服务器会将数据和缓存的规则返回,在响应头的 header 中,有两个字段 Expires和Cache-Control。

1.1、ExPires

  • Expires 字段的意思是:当前返回数据的缓存到期时间戳。
  • 当浏览器在进行请求的时候,会那浏览器本地的时候和这个时间做对比,判断资源是否过期。
  • 到期时间是由服务端生成的,但是客户端时间可能跟服务端时间有误差,这就会导致缓存命中的误差。
  • 作为HTTP 1.0的作品,所以它基本可以忽略,在HTTP 1.1 的版本,使用Cache-Control替代
# 设置以秒为单位的绝对过期时间
expires: Mon, 26 Jun 2023 14:00:56 GMT

1.2、Cache-Control

  • 服务器和客户端说,这个资源缓存只可以存在 2592000 秒(2592000 / 3000 / 24 = 30 天),在这个时间段之内,你就可以在缓存获取资源。
  • 如果 Expire 和 Cache-control 两者同时出现,则以 Cache-control 为主
cache-control: max-age=2592000
  • 常见的设置值
描述
no-cache 不会询问浏览器缓存,直接向浏览器发送请求对比过期时间 (协商缓存验证)
no-store 禁止浏览器缓存数据,直接向服务器发送请求获取数据
private(默认值) 只能被终端用户缓存,不允许CDN等中间缓存服务器对齐缓存
public 可以被所有的用户缓存,包括终端用户和CDN等中间代理器
max-age=<seconds> 缓存存储的最大周期
max-stale[=<seconds>] 客户端愿意接收一个已经过期的资源

二、协商缓存

协商缓存:在使用本地缓存之前,需要向服务器发送请求,可以解决强制缓存的情况下,资源不更新的问题

  • 强制缓存优先级 高于 协商缓存。 也就是说,当执行强制缓存的规则时,如果缓存生效,直接使用缓存,不再执行协商缓存规则。
  • 如果存在强制缓存的情况下需要使用协商缓存,则设置:
# no-cache 不强制缓存
cache-control: no-cache
  • 需要进行比较判断是否可以使用缓存。响应头中一定有etaglast-modified属性。

2.1、last-modified

  1. 服务器第一次响应请求时,告诉浏览器资源的最后修改时间,并存储到浏览器端。
  2. 再次请求时,请求头中携带If-Modified-Since字段,将上次请求服务器资源的最后修改时间传到服务器,与被请求资源的最后修改时间进行比对。
  3. 若资源的最后修改时间大于If-Modified-Since的值,说明资源又被改动过,则响应整片资源内容,返回状态码200
  4. 若资源的最后修改时间小于或等于If-Modified-Since,说明资源无新修改,则响应HTTP 304,告知浏览器继续使用所保存的缓存数据。

2.2、etag

  • Last-Modified 存在一个局限性,有以下两种情况:
  1. 不该请求,还会请求。编辑了文件,文件内容没有变,但是服务器确认为我们改动了文件,所以重新设置了缓存时间,当做新请求返回给浏览器。

  2. 该请求,反而没有请求。修改文件速度很快,快过 If-Modified-Since 字段时间差的检测,文件虽然改动了,但是并没有重新生成新的资源。

由于上述 Last-Modified 字段存在的缺陷,所以在 HTTP / 1.1 新增 etag(标识字符串) 我们对资源进行内容编码,只要内容被改变,这个编码就不同。


  1. 服务器资源是否被修改的唯一标志。首次请求唯一标志被存到客户端数据库。
  2. 同理,再次请求时,请求头中携带If-None-Match字段。与被请求资源的唯一标识进行比对
  3. 若不同,说明资源又被改动过,则响应整片资源内容,返回状态码200
  4. 若相同,说明资源没有被改动过,则响应HTTP 304,告知浏览器继续使用所保存的缓存数据。

【Web】浏览器缓存(HTTP缓存)相关推荐

  1. 不让html缓存图片吗,html – 如何强制Web浏览器不缓存图像

    背景 我正在为两个无偿网站编写和使用一个非常简单的基于CGI(Perl)的内容管理工具.它为网站管理员提供用于填充字段(日期,地点,标题,描述,链接等)并保存的事件的HTML表单.在该表单上,我允许管 ...

  2. 【Web缓存机制系列】2 – Web浏览器的缓存机制

    Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0 ...

  3. 微信H5、网页、内置Web浏览器 清理缓存,微信浏览器缓存

    目录 一.写在前面: 1.浏览器缓存带来的好处: 2.浏览器缓存带来的弊端: 二.如何清除微信浏览器的缓存: 1.在IOS环境下手动清除微信缓存: 2.在Android环境下手动清除微信缓存: 三.清 ...

  4. Web缓存机制(浏览器缓存 CDN缓存 DNS缓存)

    在本片文章中,将阅读到的内容有: web缓存的类型 1.1数据库数据缓存 1.2 服务器端缓存 1.2.1 代理服务器缓存 1.2.2 CDN缓存 1.2.3 DNS缓存 1.3 浏览器端缓存 1.3 ...

  5. 前端web:浏览器静态资源缓存策略

    浏览器静态资源缓存策略 浏览器其实提供了两种控制策略,分别是强制缓存和协商缓存 强制缓存 强制缓存:就是强制使用浏览器缓存下来的资源; 在指定的一段时间内用自己缓存的文件就行,不需要再次发出请求. 具 ...

  6. 说说web缓存-强缓存、协商缓存

    网上关于WEB缓存的文章很多,今天汇总一下. 为什么要用缓存 一般针对静态资源如CSS,JS,图片等使用缓存,原因如下: 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影 ...

  7. web开发中的缓存问题的研究(一)

    web开发中的缓存问题的研究(一) web开发中的缓存问题的研究(二) web开发中的缓存问题的研究(三) 一般情况下,浏览器都会缓存已经访问过的页面内容,关于如何禁止浏览器缓存的介绍,在网上到处都有 ...

  8. 透过浏览器看HTTP缓存(转)

    作为前端开发人员,对于我们的站点或应用的缓存机制我们能做的似乎不多,但这些却是与我们关注的性能息息相关的部分,站点没有做任何缓存机制,我们的页面可能会因为资源的下载和渲染变得很慢,但大家都知道去找前端 ...

  9. 网络:浏览器静态资源缓存机制

    一.前言 为什么需要缓存? 缓存可以说是性能优化中简单高效的一种优化方式了.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷. 对于一 ...

  10. 如何不让浏览器读取html缓存,不让浏览器缓存index.html

    参考文档:https://www.2cto.com/ask/question/4598 location = /index.html { add_header Cache-Control " ...

最新文章

  1. 发送Request Payload数据演示
  2. 重磅直播|基于激光雷达的感知、定位导航应用
  3. PHP Warning: File upload error - unable to create a temporary file in Unknown on line 0
  4. 爬虫9-淘宝商品信息定向爬虫
  5. java 调用服务器文档,JAVA远程调用服务器端方法
  6. 巧用HashMap一行代码统计单词出现次数
  7. java数组与C++数组间的区别
  8. 大型分布式C++框架《三:序列化与反序列化》
  9. 国潮手绘海报素材,传统与现代碰撞之美
  10. freeMarker(十二)——模板语言补充知识
  11. 左移寄存器vhdl_用VHDL实现的通用循环移位寄存器
  12. AndroidStudio工程打包aab文件
  13. 为移动硬盘(硬盘盒)安装linux(傻瓜式,简单,高效)
  14. html 设置td最小宽度,如何设置td标签的宽度和高度
  15. 【论文合集】2022年10月医学影像期刊论文合集
  16. 华丽的设计,20个免费的图标字体
  17. 换一种姿势挖掘任意用户密码重置漏洞
  18. ssm基于微信小程序的游泳馆管理系统 uinapp
  19. html th中加斜杠,vue element 表头添加斜线
  20. token是什么?token的作用以及运用场景?

热门文章

  1. 2015.12.31
  2. 普通商品期货开户即可交易
  3. 数字电子计算机处理信号shi,余洪伟 基于单片机数字电子时钟设计(led显示).doc...
  4. 什么是数?什么是量?
  5. 分布式缓存的四大痛点
  6. 复杂性思维中文第二版 九、基于智能体的模型
  7. 点卯.时空克隆(三维视频融合)旗舰版最新发布上线,两代技术产品,一代基于纹理技术,二代基于三维投影技术;用户攻略宝典免费拿走,有手就会!
  8. 从零开始仿写一个抖音App
  9. Flink重启策略和故障恢复策略
  10. Windows7任务管理器CPU窗口显示