HTTP 协议 -- 浏览器缓存机制

浏览器缓存机制
浏览器缓存机制主要是 HTTP 协议定义的缓存机制。
HTTP 协议中有关缓存的缓存信息头的关键字有 Cache-Control,Pragma,Expires,Last-Modified/ETag 等。
浏览器请求流程
浏览器第一请求流程:
 
浏览器再次请求流程:
ETag/If-None-Match
当资源过期时(Cache-Control 中 max-age 设置),发现资源有 ETag 声明,则再次向服务器请求带上 If-None-Match (ETag 值)。服务器收到请求后发现头 If-None-Match,则与被请求资源相应校验串进行对比,返回 200 或 304 。
Last-Modified/If-Modified-Since
当资源过期时(Cache-Control 中 max-age 设置),发现资源有 Last-Modified 声明,则再次向服务器请求时带上 If-Modified-Since,表示请求时间。服务器收到请求后发现头有 If-Modified-Since ,则与被请求的资源进行最后修改时间进行对比。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(200);若最后修改时间较旧,说明资源没有修改,会响应 304,告知浏览器继续使用保存的 cache 。
Last-Modified 和 ETag 区别?
ETag 出现是为了解决 Last-Modified 几个难解决的问题:
Last-Modified 标注的资源最后修改时间只能精确到秒级;
若某些文件被定期生成,有时它们内容没有变化,但是 Last-Modified 却改变了,这样导致文件无法使用缓存;
有可能存在服务器没有准确获取文件的最后时间,或者与代理服务器时间不一致。
ETag 由服务器自动生成,能根据准确的控制缓存。当 Last-Modified 与 ETag 一起使用时,服务器会优先验证 ETag。
浏览器检查缓存机制流程
 
在用户端,浏览器有一系列机制通过缓存来提升页面加载速度。例如 IE/Chrome 都会缓存 GET 类型的 AJAX 请求,IE 甚至还会缓存 POST 类型的请求,可以通过增加时间戳参数的方式来强制清除缓存。对于所有的静态资源文件,最佳实践是为它们增加一个永不过期的长缓存。
Cache-Control 是浏览器缓存机制中最重要的一个配置,下面是浏览器加载静态资源文件时缓存检查机制流程:
从上可以看出,静态资源优化的最佳状态是:从本地缓存资源读取 > 304 状态 > 200 状态。
参考文章:
浏览器 HTTP 协议缓存机制详解:http://www.open-open.com/lib/view/open1421744212609.html
浏览器缓存机制详解:http://mangguo.org/browser-cache-mechanism-detailed/
http://www.cnblogs.com/kaiye/p/5030893.html

转载于:https://www.cnblogs.com/god--love-you/p/6691312.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 获取实例的类名,PHP类名获取方式及单例模式实现

类名是什么意思?顾名思义就是各类起了一个名字,java中有两种数据类型,基本数据类型和引用数据类型,这里类就是引用数据类型,我们在定义一个类的时候必须给类起一个名字,一边后面的使用比如:int …

CAP理论的理解

CAP理论作为分布式系统的基础理论,它描述的是一个分布式系统在以下三个特性中: 一致性(Consistency)可用性(Availability)分区容错性(Partition tolerance)最多满足其中的两个特性。也就是下图所…

开启真我新格调 期待绚丽的未知

我们每天都在朝幸福努力着,而眼光看的太远,往往会忘记自己究竟要的是什么。人想要幸福,就得活出真我,当人不能放心大胆地活出自己时,内心会有不安和痛苦。为何要隐藏真正的自己?外界的评判真的那么重要?真我新格调&a…

vuex构建vue项目_如何使用Vue.js,Vuex,Vuetify和Firebase构建单页应用程序

vuex构建vue项目如何使用Vuetify和Vue路由器安装Vue并构建SPA (How to install Vue and build an SPA using Vuetify and Vue Router) Do you want to learn how to use Vue.js? Want to create a realistic website using Vue.js? In this tutorial, I will teach you how t…

vim 自动补全

1. vim编辑器自带关键字补全 触发&#xff1a; ctrl n or ctrl p 补全命令&#xff1a; <C-n> 普通关键字 【能够根据buffer以及标签文件列表等进行关键字补全】 <C-x><C-f> 文件名补全【像在命令行的提示信息一样&#xff0c;提示当前工…

Linux-RHEL5-初学者配置vsftpd注意事项

我安装的是RHEL5.4&#xff0c;初学&#xff0c;不在意版本。为了学习方便&#xff0c;安装操作系统时能选的选项都选全了。事实证明这个决策是正确滴&#xff0c;要不还得花时间学习怎么安装vsftp。 网上关于如何配置vsftpd的资料挺多的。 我花了小半天的时间&#xff0c;除了…

leetcode459. 重复的子字符串

给定一个非空的字符串&#xff0c;判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母&#xff0c;并且长度不超过10000。 示例 1: 输入: “abab” 输出: True 解释: 可由子字符串 “ab” 重复两次构成。 代码 class Solution {public boolean r…

解析xml的4种方法详解

1. 介绍 1&#xff09;DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构&#xff0c;然后才…

php mvc 高性能框架,swoolefy-基于swoole扩展实现的高性能的微服务和mvc框架

swoolefy这是一个基于swoole扩展实现的轻量级高性能的API和Web的MVC微服务框架&#xff0c;参考了TP,Yii2,Workerman&#xff0c;swoole_framework等框架的的设计思想。同时也结合了多年来的技术的积累的以及生产环境中的实践经验实现的功能特性1、轻量级的框架,实现路由与调度…

arcore_如何使用ARCore和Android Studio构建增强现实Android应用

arcoreby Ayusch Jain通过Ayusch Jain 如何使用ARCore和Android Studio构建增强现实Android应用 (How to build an Augmented Reality Android App with ARCore and Android Studio) This article was originally posted here本文最初发布在这里 In the previous post, I expl…

最小值的最优化问题

无约束极小值的最优化条件&#xff1a; 关于多元函数极小值点的必要条件&#xff1a; 满足的点称之为f(x)的驻点或稳定点&#xff0c;但是反过来&#xff0c;满足梯度条件的点不一定是f(x)的局部极小值。因此&#xff0c;定理转化为求解下面的方程组问题&#xff1a; 对于上面…

leetcode950. 按递增顺序显示卡牌

牌组中的每张卡牌都对应有一个唯一的整数。你可以按你想要的顺序对这套卡片进行排序。 最初&#xff0c;这些卡牌在牌组里是正面朝下的&#xff08;即&#xff0c;未显示状态&#xff09;。 现在&#xff0c;重复执行以下步骤&#xff0c;直到显示所有卡牌为止&#xff1a; …

第2课 - 搭建Lua开发环境

第2课 - 搭建Lua开发环境 1. Lua 的优点 &#xff08;1&#xff09;Lua 使用标准的 ANSI C 进行开发&#xff0c;可以无缝集成到宿主程序&#xff0c;且几乎支持所有平台。 &#xff08;2&#xff09;Lua 是开源且免费的软件&#xff0c;以源码的方式直接发布。开源软件的发布方…

关于文件系统权限的管理

关于文件系统权限的管理 众所周知的是&#xff0c;一个操作系统&#xff0c;是需要为不同的用户进行服务的&#xff0c;因为不能让每个人都以管理员进行操作&#xff0c;这样做的话&#xff0c;毫无安全性可言&#xff0c;所以我们需要验证和授权。这就体现了权限的重要性&…

深度学习工作开展_深入开展深度工作:新经济中的两项核心能力

深度学习工作开展by Bar Franek由Bar Franek 深入开展深度工作&#xff1a;新经济中的两项核心能力 (Going Deeper on Deep Work: Two Core Abilities for Thriving in the New Economy) 爱深层工作的更多理由 (A Few More Reasons To Love Deep Work) I had no idea my first…

java获取文件名方法,利用Java获取文件名、类名、方法名和行号的方法小结

大家都知道&#xff0c;在C语言中&#xff0c;我们可以通过宏FILE、 __LINE__来获取文件名和行号&#xff0c;而在Java语言中&#xff0c;则可以通过StackTraceElement类来获取文件名、类名、方法名、行号&#xff0c;具体代码如下&#xff1a;public static int getLineNumber…

tp5.1升级指导---控制器调整 _initialize方法更改为initialize

控制器调整 为了规范化&#xff0c;继承了think\Controller类的话&#xff0c;初始化方法从原来的_initialize方法更改为initialize。转载于:https://www.cnblogs.com/lsyy/p/11027416.html

leetcode537. 复数乘法

给定两个表示复数的字符串。 返回表示它们乘积的字符串。注意&#xff0c;根据定义 i2 -1 。 示例 1: 输入: “11i”, “11i” 输出: “02i” 解释: (1 i) * (1 i) 1 i2 2 * i 2i &#xff0c;你需要将它转换为 02i 的形式。 代码 class Solution {public String c…

初始多态

package Li;public class Person { String name;public Person() {super(); }public Person(String name) {super();this.name name; }public void eat(){System.out.println(name"正在吃面包"); } }package Li;public class Student extends Person {public Studen…

Bitmap尺度变换

1 Bitmap bitMap BitmapFactory.decodeFile(path);2 int width bitMap.getWidth();3 int height bitMap.getHeight();4 // 设置想要的大小5 int newWidth 500;6 int newHeight 400;7 // 计算缩放比例8 float scaleWidth ((float) newWidth) / width;9 float scaleHeight …