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,一经查实,立即删除!

相关文章

CAP理论的理解

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

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

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

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

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

最小值的最优化问题

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

第2课 - 搭建Lua开发环境

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

(私人收藏)python学习(游戏、爬虫、排序、练习题、错误总结)

python学习(游戏、爬虫、排序、练习题、错误总结) https://pan.baidu.com/s/1dPzSoZdULHElKvb57kuKSgl7bz python100经典练习题python-错误和异常小结python-大作业之五子棋游戏(附代码)python-网络爬虫几种排序方法python实现新手常见的python运行时错误…

MySQL性能指标及计算方法

MySQL性能指标及计算方法 绝大多数MySQL性能指标可以通过以下两种方式获取: (1)mysqladmin 使用mysqladmin extended-status命令获得的MySQL的性能指标,默认为累计值。如果想了解当前状态,需要进行差值计算&#xff1b…

php可变变量讲解,PHP可变变量实例详解

什么是可变变量?在PHP中有一个其他类型的变量,“可变变量”。可变变量是一种PHP独特的变量,他允许动态改变一个变量的名称。可变变量的工作原理这个特性的工作原理是用一个变量的值作为另一个变量的名称。例如,我们可以设置$str的…

Python自动化运维:Django之View视图和Template

views详解 http请求中产生两个核心对象: http请求:HttpRequest对象 http响应:HttpResponse对象 (1) HttpRequest对象 当请求一个页面时,Django 创建一个 HttpRequest对象包含原数据的请求。然后 Django 加载…

java重入锁,再探JAVA重入锁

之前的文章中简单的为大家介绍了重入锁JAVA并发之多线程基础(2)。这里面也是简单的为大家介绍了重入锁的几种性质,这里我们就去探索下里面是如何实现的。我们知道在使用的时候,必须锁先有定义,然后我们再拿着当前的锁进行加锁操作&#xff0c…

【GoWeb开发实战】Cookie

cookie Web开发中一个很重要的议题就是如何做好用户的整个浏览过程的控制,因为HTTP协议是无状态的,所以用户的每一次请求都是无状态的,我们不知道在整个Web操作过程中哪些连接与该用户有关,我们应该如何来解决这个问题呢&#xff…

Spring中WebApplicationInitializer的理解

现在JavaConfig配置方式在逐步取代xml配置方式。而WebApplicationInitializer可以看做是Web.xml的替代,它是一个接口。通过实现WebApplicationInitializer,在其中可以添加servlet,listener等,在加载Web项目的时候会加载这个接口实…

网络摄像头CVE

CVE-2018-9995 rtsp未授权访问 rtsp后缀整理: Axis(安讯士) rtsp:// 192.168.200.202/axis-media/media.amp?videocodech264&resolution1280x720 rtsp://IP地址/mpeg4/media.amp rtsp://IP地址/安迅士/AXIS-media/media.amp123D-Link …

Elastic-job使用及原理

一、原理 elastic-job有lite版和cloud版,最大的区别是有无调度中心,笔者采用的是lite版本,无中心化。 tips: 第一台服务器上线触发主服务器选举。主服务器一旦下线,则重新触发选举,选举过程中阻塞,只有主服…

BeanShell自动装箱拆箱

“装箱”和“拆箱”是用来描述自动包装一个原始类型到一个包装类以及在必要时解开包装回到原始类型的术语。装箱是 Java 的特性(SDK 1.5)之一,且 BeanShell 已支持多年。 BeanShell 支持原始类型的装箱和拆箱。比如: int i5; Inte…

安装Docker step by step

1. 系统要求 centos7以上 使用cat /etc/redhat-release查看系统版本,我的Centos 7.6 centos-extra 仓库 enable,默认是打开的 2.安装docker docer安装分为联网安装和离线安装两种安装 方式, 第一种 在有外网环境下安装docker,一般使用yum安…

微信小程序 php配置,微信小程序的配置

我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。以下是一个包含了所有配置选项的简单配置app.json{"pages": ["pages/index/index","pages/logs/index"],"wi…

PWA - service worker - Workbox(未完)

Get Started(开始) 只有get请求才能cache缓存吗?Create and Register a Service Worker File(创建和注册 Service Worker) Before we can use Workbox, we need to create a service worker file and register it to o…

System类入门学习

第三阶段 JAVA常见对象的学习 System类 System类包含一些有用的字段和方法,他不能被实例化 //用于垃圾回收 public static void gc()//终止正在运行的java虚拟机。参数用作状态码,根据惯例,非0表示异常终止 public static void exit(int stat…

gulpfile php,Laravel利用gulp如何构建前端资源详解

什么是gulp?gulp是新一代的前端项目构建工具,你可以使用gulp及其插件对你的项目代码(less,sass)进行编译,还可以压缩你的js和css代码,甚至压缩你的图片,gulp仅有少量的API,所以非常容易学习。 gulp 使用 st…