浏览器的缓存控制

浏览器第一次向服务器请求资源时,服务器会发送完整的文件,并且在发送文件时还附带一些额外信息——比如过期时间:Expires:Mon,10 Dec 1999  02:25:22GMT。浏览器可以把这个额外信息保存在本地(缓存)。

  浏览器在请求已经访问过的URL时,会判断是否使用缓存,而浏览器的缓存控制分为强缓存和协商缓存;协商缓存必须配合强缓存使用。

浏览器的第一次缓存:

首先浏览器第一次跟服务器请求一个资源,服务器在返回这个资源和response header的同时,会根据开发者要求或者浏览器默认,在response的header加上相关的http response header。

浏览器再次请求时

一、当浏览器对 某个资源的请求命中了强缓存时,利用Expire或Cache-Control这两个http response header实现:

1:Expire:描述的是一个绝对时间,根据的是客户端的时间。用GMT格式的字符串表示,如:Expires:Mon,10 Dec 1999  02:25:22GMT,下次浏览器再请求同一个资源时,先从客户端缓存中寻找,找到这个资源后,拿出它的Expire跟当前的请求时间比较,如果请求时间在Expire指定的失效时间之前,就能命中缓存,这样就不用再次到服务器上去缓存一遍,节约了资源,但正是因为 是绝对时间,如果客户端时间被随意更改一下,这个机制就失效了

所以我们需要Cache-Control:

2、Cache-Control描述的是一个相对时间,在进行命中缓存时,都是利用浏览器时间判断,这两个header可以只启用一个,也可以同时启用,当response header中同时存在两者时,Cache-Control优先级高于Expire

二、当浏览器对某个资源的请求没有命中强缓存,就会发一个请求到服务器,验证协商缓存是否命中。如果命中,则还是从客户端加载,协商缓存利用的是Last-Modified,if-Mondified-Since和Etag、if-None-Match这两对header来管理

1.Last-Modified:原理和Expire相同,区别是它根据服务器的时间返回的header来判断缓存是否存在,但是有时候也会服务器上资源有变化,但是最后修改时间却没有变化的情况,这时候需要ETag

2、Etag、if-None-Match:原理上也是一样,区别是浏览器跟服务器请求同一个资源,服务器在返回同一个资源的同时,在response的header加上ETag的header,这个header是服务器根据当前请求的资源生成的一个唯一标识,这个唯一标识就是一个字符串,只有资源有变化,这个字符串就不相同。

时间: 2024-10-15 06:51:13

浏览器的缓存控制的相关文章

浏览器缓存控制

浏览器缓存控制 Last-Modified/ If-Modified-Since 在浏览器第一次请求某一个URL时,服务器端的返回状态码200,内容是客户端请求的资源,同时有一个Last-Modified的属性标记此文件在服务器端最后被修改的时间. Last-Modified格式类似这样:Last-Modified : Fri , 12 May 2006 18:53:33 GMT 客户端第二次请求此URL时,根据HTTP协议的规定,浏览器会向服务器传送If-Modified-Since报头,询问

控制浏览器不要缓存

//发头控制浏览器不要缓存        response.setDateHeader("expries", -1);        response.setHeader("Cache-Control", "no-cache");        response.setHeader("Pragma", "no-cache"); 控制浏览器不要缓存,布布扣,bubuko.com

服务端控制各种浏览器禁止缓存页面资源 学习笔记

import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Demo2 extends HttpServlet { public voi

HTTP缓存控制总结

引言 通过网络获取内容既缓慢,成本又高.大的相应需要在客户端和服务器之间多次往返通信,这拖延了浏览器可以使用和处理内容的时间,同时也增加了通信的成本.因此,缓存和重用以前获取到的资源的能力成为性能优化的一个很关键的方面. 与缓存相关的HTTP首部字段主要有哪些 (1)通用首部字段(意味着既能用于请求报文,又能用于响应报文) 字段名称 说明 Cache-Control 控制缓存的行为 Pragma http1.0的遗留物,值为"no-cache"时禁用缓存 (2)请求首部字段 (3)响应

HTTP缓存控制小结

引言 通过网络获取内容既缓慢,成本又高:大的响应需要在客户端和服务器之间进行多次往返通信,这拖延了浏览器可以使用和处理内容的时间,同时也增加了访问者的数据成本.因此,缓存和重用以前获取的资源的能力成为优化性能很关键的一个方面. 序 本文用于解决以下六个疑问. 与缓存相关的HTTP首部字段主要 有哪些 ? 这些HTTP首部字段之间的 联系与区别 ? HTTP缓存首部字段的 优先级 ? HTTP缓存首部字段的 特点与局限性 ? 用户 不同的页面刷新行为的差别 ? 在 实践中 我们该用哪些报文头来 控

9大浏览器端缓存机制分析

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件

06 HTTP协议缓存控制

一:HTTP协议缓存控制 第1次请求时 200 ok 第2次请求时 304 Not Modified 未修改状态 解释: 在网络上,有一些缓存服务器,另, 浏览器自身也有缓存功能. 当我们第一次某图片时,正常下载图片,返回值200 基于一个前提--图片不会经常改动, 服务器在返回200的同时,还返回该图片的”签名”-- Etag  ,(签名可以理解图片的”指纹”). 当浏览再次访问该图片时,去服务器校验”指纹”, 如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器负担. 二:抓包观察分析

基于maven插件的缓存控制插件

asset-cache-control github源码及下载地址: https://github.com/StruggleBird/asset-cache-control 基于maven插件的缓存控制工具,通过修改资源url的请求参数,比如在url后面添加版本号或者时间戳的形式,来有效的防止浏览器缓存. 目前该功能可用于避免js.css.image 三种文件类型缓存 用法: 1.添加插件asset-cache-control 到pom文件中: <build> <plugins>

php输出缓存控制

一.为什么学习php 输出缓存控制(Output Control)? 答:当然是php 输出缓存控制可以帮我们完成想完成的事情了.那就要从什么是输出缓存控制开始来了解了? 二.什么是php 输出缓存控制(Output Control) 答:由于输出php类似echo输出的时候,首先输出到php buffer里面的.所以我们可以控制这个缓存里面的数据了.当我们echo输出到浏览器的时候,要经历四个步骤:php buffer ----> web server buffer ---->browser