浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires; Cache-control等)。但是也有非HTTP协议定义的缓存机制,如使用HTML Meta 标签,Web开发者可以在HTML页面的<head>节点中加入<meta>标签,代码如下:
html code |
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> |
上述代码的作用是告诉浏览器当前页面不被缓存,每次访问都需要去服务器拉取。使用上很简单,但只有部分浏览器可以支持,而且所有缓存代理服务器都不支持,因为代理不解析HTML内容本身。
下面我主要介绍HTTP协议定义的缓存机制。
Expires策略
Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。
下面是宝宝PK项目中,浏览器拉取jquery.js web服务器的响应头:
注:Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date: Mon,31 Dec 2001 04:25:57GMT。
Web服务器告诉浏览器在2012-11-28 03:30:01这个时间点之前,可以使用缓存文件。发送请求的时间是2012-11-28 03:25:01,即缓存5分钟。
不过Expires 是HTTP 1.0的东西,现在默认浏览器均默认使用HTTP 1.1,所以它的作用基本忽略。
Cache-control策略(重点关注)
Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。
http协议头Cache-Control : |
值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age 各个消息中的指令含义如下:
|
还是上面那个请求,web服务器返回的Cache-Control头的值为max-age=300,即5分钟(和上面的Expires时间一致,这个不是必须的)。
Last-Modified/If-Modified-Since
Last-Modified/If-Modified-Since要配合Cache-Control使用。
l Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。
l If-Modified-Since:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。
Etag/If-None-Match
Etag/If-None-Match也要配合Cache-Control使用。
l Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器觉得)。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。
l If-None-Match:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。web服务器收到请求后发现有头If-None-Match 则与被请求资源的相应校验串进行比对,决定返回200或304。
既生Last-Modified何生Etag?
你可能会觉得使用Last-Modified已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要Etag(实体标识)呢?HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题:
l Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间
l 如果某些文件会被定期生成,当有时内容并没有任何变化,但Last-Modified却改变了,导致文件没法使用缓存
l 有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形
Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符,能够更加准确的控制缓存。Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。
用户行为与缓存
浏览器缓存行为还有用户的行为有关!!!
用户操作 |
Expires/Cache-Control |
Last-Modified/Etag |
地址栏回车 |
有效 |
有效 |
页面链接跳转 |
有效 |
有效 |
新开窗口 |
有效 |
有效 |
前进、后退 |
有效 |
有效 |
F5刷新 |
无效 |
有效 |
Ctrl+F5刷新 |
无效 |
无效 |
总结
浏览器第一次请求:
浏览器再次请求时:
相关推荐
史莱姆牧场(电脑游戏)
APQP开发审核资料:汽车行业标准化的项目管理与质量审核整合编制方案,资深项目管理经验者的经验梳理。,APQP开发审核资料 1.经过大众、上汽、小鹏、雷诺的体系审核 2.结合AIAG APQP手册、VDA6.3、VDA4.3、PMP进行整合编制(优化)。 3.标准化模板,层次清晰,五大阶段依次展开,共计约90份文件 4.适合项目管理、质量管理、技术开发、试验相关的朋友使用。 5.对于新成立的汽车事业部门,可以节省数月的工作量。 作者:8年的项目管理经验,2年主机厂、3年国企、3年外企,PMP证书。 本资料是作者多年的经验梳理 ,APQP开发审核资料;体系审核;整合编制;标准化模板;五大阶段;项目管理;质量管理;技术开发;试验;新汽车事业部门;经验梳理,优化整合的APQP开发审核资料集:四大车企体系认证的标准化模板
1、文件内容:sssd-1.16.5-10.el7_9.16.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/sssd-1.16.5-10.el7_9.16.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:setools-console-3.3.8-4.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/setools-console-3.3.8-4.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
perl516-perl-PlRPC-0.2020-5.el6.centos.alt.noarch.rpm
三相光伏逆变器研发蓝图解析:从源头解析理图PCB源代码,洞察10Kw光伏并网技术的奥秘,三相10Kw光伏并网逆变器。包含全套理图 PCB 源代码 ,核心关键词:三相10Kw光伏并网逆变器; 全套原理图; PCB; 源代码;,三相光伏并网逆变器全套图谱:PCB原理与源代码汇编详解
perl516-perl-DBD-Pg-tests-2.19.3-5.el6.centos.alt.x86_64.rpm
基于UDS的BootLoader上位机源代码(C#):支持ISO通信与多种CAN卡,S-record格式解析及二次开发扩展应用,基于UDS的BootLoader上位机源代码(C#) 基于UDS的BootLoader上位机源代码,支持ISO15765通信,支持PeakCAN , ZJG CAN等CAN卡, 支持S-record格式的二进制文件解析; 可二次开发或扩展应用。 ,核心关键词:UDS BootLoader;上位机源代码(C#);ISO15765通信;PeakCAN;ZJG CAN;CAN卡;S-record格式;二进制文件解析;二次开发;扩展应用。,UDS BootLoader上位机源码(支持多种CAN卡及S-record格式解析)
Labview密码登录系统:实用、便捷的用户管理功能,采用Access数据库安全存储,labview用户登录程序,可以直接用做密码登录系统,用户管理,实用强,使用方便,采用access数据库制作。 ,核心关键词:LabView用户登录程序; 密码登录系统; 用户管理; 实用性强; 使用方便; Access数据库制作;,"LabView用户登录系统:便捷管理,Access数据库支持密码登录"
基于深度学习的地理知识图谱构建方法研究.pdf
DS18B20资料文档
三菱iQ-R系列PLC控制系统全套资料详解:轴控制、通讯技术及编程规范介绍,三菱iQ-R系列PLC控制系统项目全套资料 系统才用三菱iQ-R系列PLC,采用R04CPU ,其中涉及到轴控制, MODBUS通讯,ETHERNET通讯,模拟量输入,数字量输入输出。 PLC程序采用ST语言和梯形图编写。 触摸屏采用维纶通的。 提供项目全套资料。 ,核心关键词:三菱iQ-R系列PLC; R04CPU; 轴控制; MODBUS通讯; ETHERNET通讯; 模拟量输入; 数字量输入输出; ST语言; 梯形图编写; 维纶通触摸屏; 项目全套资料。,三菱iQ-R PLC控制系统项目:全集成轴控制与通讯技术资料集
1、文件内容:texinfo-5.1-5.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/texinfo-5.1-5.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
威纶通触摸屏分期付款智能锁机系统(含PC程序及宏程序例子,精确时间设定,多重安全防护),威纶通触摸屏分期付款锁机(带PC程序) 文件内包含 威纶通触摸屏源程序例子(含宏程序) 总共两个页面可以快速移植到自己的程序上。 带PC端程序自动计算设定时间密码。 宏程序带详细注释,适合学习 可以动态设置锁机时间精确到分钟。 密码随机且不重复。 防破解验证。 提前提醒功能。 自己设置独立加密码功能,保证你的密码独一无二 没有你设置的加密码,有程序也解不开。 密码自动效验。 字母数字混合加密。 ,威纶通触摸屏; 分期付款锁机; 宏程序; 程序移植; 设定时间密码; 动态设置锁机时间; 密码随机不重复; 防破解验证; 提醒功能; 独立加密码功能; 密码自动效验; 字母数字混合加密。,威纶通触摸屏加密锁机方案:支持分期付款,PC端程序自动管理时间密码
1、文件内容:tbb-doc-4.1-9.20130314.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/tbb-doc-4.1-9.20130314.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
appimagetool-x86_64.AppImage 给大家免费下载
IMG_7628.jpg
1、文件内容:sqlite-tcl-3.7.17-8.el7_7.1.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/sqlite-tcl-3.7.17-8.el7_7.1.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
perl516-perl-File-Slurp-9999.19-10.el6.centos.alt.noarch.rpm
图像检索特征提取、基于VGG的图像检索