Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Web浏览器缓存机制

Web浏览器缓存机制

原创
作者头像
伯爵
修改于 2019-10-15 02:07:27
修改于 2019-10-15 02:07:27
1.5K0
举报
文章被收录于专栏:前端小菜鸟前端小菜鸟

Web浏览器缓存机制

Web缓存是存在服务器和客户端之前的资源副本。客户端会缓存请求过的静态资源(图片,CSS 文件,JS文件等),当用户再次请求相同的url时,浏览器会根据缓存规则判断是否使用已经缓 存的静态资源文件,或者绕过资源缓存直接请求服务器重新获取资源。

Web缓存也就是HTTP缓存机制,是前端性能优化的重要措施,利用Web缓存可以:

  • 减少数据冗余传输
  • 减轻服务器请求压力
  • 减少资源请求因为网络传输导致的时延,加快渲染速度
  • 较少的数据传输可以减轻网络线路的传输瓶颈。
HTTP缓存首部

Web缓存机制主要是利用HTTP协议定义的首部信息控制缓存。常见的与缓存相关的首部有:

版本

首部

实例

描述

HTTP1.0

Pragma

Pragma

设置页面是否缓存,Pragma为缓存,no-cache表示忽略缓存

Expires

Mon, 22 Jul 2002 11:12:01 GMT

Expires的值是格林尼治时间格式的参数,用来设置过期时间,即定义资源的失效时间,失效时间内则请求使用缓存资源

HTTP1.1

Cache-Control

Cache-Control:max-age=600

Cache-Control首部是为了解决服务器和客户端时间不一致问题导致缓存失效的问题,(a)max-age=600:配置的是请求发起时开始计算的相对时间(毫秒),当前参数时间内请求资源使用缓存资源 (b)no-cache:每次发起请求都需要验证缓存资源的新鲜度,新鲜度满足则返回304状态码,使用缓存资源,否则返回200状态码,返回资源主体(c)no-store:不缓存,每次请求需要从服务器重新获取资源(d)public:所有内容只有客户端可以缓存(e)private:只允许客户端缓存

Last-Modified/If-Modified-Since

这两个首部需要配合使用,同时需要Cache-Control标识参与。(a)Last-Modified:服务器在相应资源请求时,标识资源最后的修改时间,(b)If-Modified-Since :资源过期并且存在Last-Modified声明,请求首部 If-Modified-Since获取Last-Mdodied的值发送到服务器和请求资源的修改时间比对,如果服务器资源修改过则返回资源主体和200状态码到浏览器,浏览器更新缓存资源,否则说明资源无修改返回304状态码

Etag/If-None-Match

W/v20.1

配合Cache-Control使用。(a) Etag是请求的服务器资源的唯一标识,资源改动则标识更改,从而验证资源是否更新。(b)当资源过期请求携带首部If-None-Match赋值Etag的标识值,与服务资源标识进行比对,如果发生变化则变化则返回200状态码和资源主体,否则返回304状态码

缓存分类

HTTP缓存可以根据缓存过程分为强制缓存和协商缓存。

(1)强制缓存:向浏览器缓存查询请求结果,根据缓存结果规则是否使用缓存资源

  • 不存在缓存标识和缓存结果,直接请求服务器资源
  • 存在缓存结果和缓存标识,缓存结果失效,使用协商缓存
  • 存在缓存结果和缓存标识,缓存结果未失效,使用缓存

强制缓存的相关的首部:Expires和Cache-Control

(2)协商缓存:当强制缓存失效,缓存规则使用协商缓存,HTTP请求向服务器发起缓存器验证,服务器判断缓存是否生效。

  • 缓存生效,返回304状态码
  • 缓存失效,返回200状态码和新的资源结果,浏览器加载资源并且更新本地缓存

协商缓存相关的首部:Last-Modified / If-Modified-Since和Etag / If-None-Match

缓存优先级:
  • Pragma 和Expires是HTTP1.0定义的用于管理缓存的首部字段,当两个首部字段同时存在,Pragma的优先级高于Expires
  • Cache-Control是HTTP1.1定义的首部字段,是为了解决Expires定义的过期时间相对于服务器而已,无法确保服务器和客户端时间一致性问题。 Cache-Control的优先级高于Expires
  • 强制缓存优先级高于协商缓存
  • Etag / If-None-Match优先级高于Last-Modified / If-Modified-Since
缓存的处理步骤

web缓存处理步骤很简单,包括了接收请求,解析报文,查询缓存,新鲜度检查,创建响应和发送,记录日志是事务操作的可选步骤。

  • 接收:读取请求报文
  • 解析:解析请求报文,获取URL和首部信息
  • 查找:查找本地缓存,没有缓存文件则请求服务器或者父类缓存,并缓存
  • 新鲜度检查:验证缓存是否新鲜,需要再验证则需要请求服务器验证缓存新鲜度
  • 创建响应:缓存主体和更新的首部构建响应报文
  • 发送:响应发送到服务器
  • 日志:记录信息
其他

浏览器缓存分为内存缓存和硬盘缓存,内存缓存读取速度快,时效性好;硬盘缓存读取缓存时需要I/O操作,重新解析缓存内容,相对于内存缓存速度慢但是不会占用内存资源。

浏览器将JS脚本资源和图片资源存储在内存缓存,css,xml文件存储的硬盘文件。

当浏览器刷新时,js,图片等资源直接从内存中加载,css文件需要重用从硬盘读取并解析渲染到页面。

参考
  1. HTTP 缓存
  2. HTTP权威指南
  3. Web缓存相关知识整理
  4. 彻底理解浏览器的缓存机制

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nginx编译安装以及选项
编译安装Nginx 1、安装常见的工具和库(GCC、PCRE、zlib、OpenSSL)
星哥玩云
2022/07/14
9570
LNMP之Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/PO
用户1173509
2018/03/28
1K0
LNMP之Nginx
Nginx(一)安装及启停
    我发现很多博客排版杂乱,表达不清,读者看了往往云里雾里。我此前的博客也是如此,我自己很不满意。今起,每一篇博客都会用心写,此前的博客我也会尽力修改。至少要做到排版整洁,让自己满意,让别人能看懂。
用户1432189
2018/09/05
8670
Nginx(一)安装及启停
重识Nginx - 02 手把手教你编译适合自己的nginx 1.22.0
文章目录 编译Nginx 下载nginx 1.22.0 step 2 解压 编译 (这里我们只指定 prefix,其他默认 ) make 编译 make install 安装 Configure的命令参数 编译Nginx 下载nginx 1.22.0 https://nginx.org/en/download.html 复制链接地址 ,下载 1.22.0 [root@VM-0-7-centos ng]# wget https://nginx.org/download/nginx-1.22.0.
小小工匠
2022/09/27
8050
重识Nginx - 02 手把手教你编译适合自己的nginx 1.22.0
Linux下Nginx源码编译安装
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,在高连接并发的情况下Nginx 是 Apache 服务器不错的替代品.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx。 
星哥玩云
2022/07/19
1.9K0
linux下编译安装nginx完整版
0x01 Nginx有哪些优点 更快 这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应; 另一方在高峰期(如有数以万计的并发请求),Nginx可以比其他Web服务器更快地响应请 高扩展性 Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极 低的模块组成。因此,当对某一个模块修复Bug或进行升级时,可以专注于模块自身,无须 在意其他。 高可靠性 Nginx的高可靠性来自于其核心框架代码 的优秀设计、模块设计的简单性;官方提供的常用模块都非常稳定,每个worker进
小柒吃地瓜
2020/04/23
15.5K1
linux主要发行版安装nginx教程
[nginx] name=nginx repo baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/ gpgcheck=0 enabled=1
ianzhi
2019/07/31
2.5K0
linux主要发行版安装nginx教程
Nginx编译安装参数详解
./configure --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
非著名运维
2022/06/22
1.6K0
Nginx编译安装参数详解
2.Nginx进阶学习之最佳配置实践指南
描述:在企业线上生产环境中推荐进行Nginx编译安装,可以按照业务侧重点进行相应 Nginx 编译参数配置,所以编译参数不是功能加的越多越好,应该尽可能少编译模块不用的最好不要加入,本小结将以最新的Nginx版本以及依赖版本进行编译演示。
全栈工程师修炼指南
2022/09/29
2K0
2.Nginx进阶学习之最佳配置实践指南
OpenNJet如何做到让用户永远在线
最近看到了国内开源的一个名为OpenNJet的项目,有一个响亮的口号:“下一代云原生应用引擎”。
手撕代码八百里
2024/05/24
990
OpenNJet如何做到让用户永远在线
Nginx 模块(1)
Nginx (engine x) 可以作为 HTTP 和反向代理服务器,也可以作为邮件代理和普通的 TCP/UDP 代理服务器
franket
2021/10/18
5020
爬虫、代理和Nginx
做过爬虫的人应该都知道,抓的网站和数据多了,如果爬虫抓取速度过快,免不了触发网站的防爬机制,几乎用的同一招就是封IP。解决方案有2个:
后端技术探索
2018/10/18
2.1K0
爬虫、代理和Nginx
nginx 学习之反向代理(1)
你可以在http模块内部、server或location里面配置日志(日志格式指定为main或者定义其他日志格式)
用户2825413
2019/07/16
3570
Centos下安装FastDFS
FastDFS运行需要一些依赖,在课前资料提供的虚拟中已经安装好了这些依赖,如果大家想要从头学习,可以按下面方式安装:
用户4396583
2024/07/25
1500
nginx编译参数详解
Nginx 使用 liunx/Unix 下常用的 ‘./configure && make && make install’ 过程来编译安装。 configure 脚本确定系统所具有一些特性,特别是 nginx 用来处理连接的方法。然后,它创建 Makefile 文件。 configure 支持下面的选项: –prefix=<path> – Nginx安装路径。如果没有指定,默认为 /usr/local/nginx。 –sbin-path=<path> – Nginx可执行文件安装路径。只能安装时指定,
苦咖啡
2018/05/07
1.2K0
Nginx入门详解文档
Nginx入门详解文档 1 文章内容 掌握nginx+tomcat反向代理的使用方法。 掌握nginx作为负载均衡器的使用方法。 掌握nginx实现web缓存方法。 2 nginx介绍 2.1 什么是nginx Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。 3 nginx安装 3.1 下载 进入http://nginx.org/en/download.html
Java帮帮
2018/03/15
1.4K0
Nginx入门详解文档
nginx 基础
nginx -s quit:优雅停止,工作线程完成工作,以启动nginx的用户关闭;同系统命令:kill -s QUIT pid
WindWant
2020/09/11
8140
Nginx 动态编译加载第三方流媒体服务模块:Nginx-RTMP-Module
Nginx 1.9.11开始增加加载动态模块支持,可以在不停机的情况下加载和卸载模块。从此不再需要替换nginx文件即可增加第三方扩展。目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块。
Tinywan
2024/03/02
5070
Nginx 动态编译加载第三方流媒体服务模块:Nginx-RTMP-Module
Nginx源码安装及调优配置
由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置。 image.png Nginx编译前的优化 [root@linuxprobe ~]# wget http://nginx.org/download/nginx-1.10.1.tar.gz [root@linuxprobe ~]# tar xvf nginx-1.10.1.tar.gz -C /usr/local/src/ [root@l
shaonbean
2018/01/15
2.1K0
Nginx源码安装及调优配置
Nginx流媒体支持配置
有关Nginx相关的基础知识 Linux 6下安装编译安装Nginx Nginx 概述及日常管理 Nginx基于IP,端口,域名配置虚拟主机 Linux 下配置nginx到php的连接
Leshami
2018/08/08
1.4K0
相关推荐
Nginx编译安装以及选项
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档