【转载】浏览器缓存详解:expires cache-control last-modified

下面的内容展示了一个常见的 Response Headers,这些 Headers 要求客户端最多缓存 3600 秒,也给出了一个 pub1259380237;gz 的校验值。

HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: "pub1259380237;gz"
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: http://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent

对于缓存而言,我们主要用了 EtagCache-ControlLast-Modified

 Cache-Control

Cache-Control 是指缓存指令,这个指令控制什么条件下可以缓存响应,以及可以缓存多久。这个协定取代了以前的 Expires 指令,在 HTTP/1.1 开始支持,在这么长时间后,我们可以认为 Cache-Control 在正常环境下都是支持的。Cache-Control的格式如下:

Cache-control: must-revalidate
Cache-control: no-cache
Cache-control: no-store
Cache-control: no-transform
Cache-control: public
Cache-control: private
Cache-control: proxy-revalidate
Cache-Control: max-age=<seconds>
Cache-control: s-maxage=<seconds>

谁可以缓存

public 与 private 用来指定谁可以缓存。public 是指任何资源都可以被缓存下来,即使某些部分需要 http 验证的情况下; private 则是要求针对单一用户进行缓存,其他用户是无法使用这一块缓存的。

怎么缓存

no-cache,no-store 与 no-transform 来指定怎么缓存。“no-cache”表示必须先与服务器确认返回的响应是否发生了变化,然后才能使用该响应来满足后续对同一网址的请求。因此,如果存在合适的校验值 (ETag),no-cache 会发起往返通信来验证缓存的响应,但如果资源未发生变化,则可避免下载。相比之下,“no-store”则要简单得多。它直接禁止浏览器以及所有中间缓存存储任何版本的返回响应,例如,包含个人隐私数据或银行业务数据的响应。每次用户请求该资产时,都会向服务器发送请求,并下载完整的响应。如果没有指定这个字段,那么就认为是可以缓存的。

缓存多久

指令指定从请求的时间开始,允许获取的响应被重用的最长时间(单位:秒)。例如,max-age=60 表示可在接下来的 60 秒缓存和重用响应。

Last-Modified and If-Modified-Since

除了服务端发送的 Cache-Control 指令外,可以做的更灵活一些,毕竟不是所有请求都适用于不变的 max-age。If-Modified-Since 和 Last-Modified 这一对就是另一种灵活的解决方案。

 Last-Modified 是由服务端返回的,用于告知客户端最后一次修改是什么时候。客户端需要记录下来这个值,并在下一次请求的时候,通过 If-Modified-Since 这个字段附上上一次服务端返回的 Last-Modified 的值。在这种情况下,服务端就有了两次时间,在通过比对后,就可以知道在这段时间内,内容是否发生了改变。如果没有发生变化,就会返回 304 NOT MODIFIED 这个状态码,而不是通常的 200。反之如果发生了变化,就进行正常的返回。

Etag and If-None-Match

还记得前面提交的 Etag 吗?这是从另一种维度上来确定 Cache 是否需要更新。服务端会返回相应的 Etag,这个 Etag 客户端不用关心其具体是怎么实现的,只需要能够记录下这个值就行。服务端是通过对内容进行 hash,或者别的算法来生成这样的 Etag,当客户端请求的时候,只需要去检查两者是否相同,即可知道内容有没有发生变化。返回的方式,与前面 If-Modified-Since and Last-Modified 相同。

 

转载于:https://www.cnblogs.com/caiyanhu/p/6931624.html

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

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

相关文章

ctype函数_PHP ctype_xdigit()函数与示例

ctype函数PHP ctype_xdigit()函数 (PHP ctype_xdigit() function) ctype_xdigit() function is a character type (CType) function in PHP, it is used to check whether a given string contains hexadecimal digits or not. ctype_xdigit()函数是PHP中的字符类型(CType)函数…

linux ldd运行不成功,Linux_Linux:Ldd命令介绍及使用方法,1、首先ldd不是一个可执行程序 - phpStudy...

Linux&#xff1a;Ldd命令介绍及使用方法1、首先ldd不是一个可执行程序&#xff0c;而只是一个shell脚本2、ldd能够显示可执行模块的dependency&#xff0c;其原理是通过设置一系列的环境变量&#xff0c;如下&#xff1a;LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_L…

开发原生的 Google 眼镜应用 【已翻译100%】(2/2)

使用传感器 Glass没有键盘或触摸屏&#xff0c;但仍然具有移动设备所有的标准的传感器。你可以使用标准的传感器组件来访问这些传感器。 定位和GPS Glass内置有GPS。TLocationSensor具有一个OnLocationChanged事件&#xff0c;这一事件在GPS组件被激活时产生&#xff0c;在有除…

linux下php的安装,Linux下PHP安装

1 下载php源码安装包 个人是php-5.6.30.tar.gzphp2 解压文件mysqltar -zxvf php-5.6.30.tar.gznginx3 编译安装sqlcd php-5.6.30api建立www用户和www用户组curlgroupadd wwwsocketuseradd -g www wwwphp-fpm在编译以前先把依赖包都装上urlyum install curl curl-develyum inst…

PHP array_filter()函数与示例

PHP array_filter()函数 (PHP array_filter() Function) array_filter() function is used to apply a filter on array elements based on the function and returns the array with filtered elements, it accepts an array to be checked and a callback function. The call…

微软宣布以 262 亿美元现金收购 LinkedIn

北京时间6月13日20:45&#xff08;美国当地时间6月13日上午8:45&#xff09;&#xff0c;微软(Nasdaq: MSFT)和LinkedIn(领英&#xff0c;NYSE: LNKD)对外宣布&#xff0c;双方达成协议&#xff0c;微软宣布将以每股196美元、总价262亿美元的价格收购LinkedIn&#xff0c;由现金…

linux vim 快速定位位置,vim快速移动定位的一些操作命令

很多时候你在编辑文件时移动光标都会花很长时间&#xff0c;这样就无法高效的编辑了&#xff0c;要想达到高效编辑最好能够将光标马上定位到你需要的位置&#xff0c;vim就是可以满足你这样需求的一款编辑器&#xff0c;本节就要讲一下vim快速移动定位的一些操作命令。下面的操…

本月初 本月末 java_本月内容作家(2018年8月)

本月初 本月末 javaWe are feeling glad to announce that Prerana Jain is the Content Writer Of The Month (August 2018) on the basis of her excellent contribution and her support to us. 我们很高兴地宣布&#xff0c; Prera​​na Jain凭借其出色的贡献和对我们的支…

“玲珑杯”线上赛 Round #15 河南专场 F 咸鱼文章

elttiL moT nwod eht teerts sllac ruo god ” ehT peek god ” . piZ si a peehs god . tuB nehw moT seirt ot yas ” peeS ” , ti semoc tuo ” peek ” . dnA ni a yaw moT si thgir . piZ si syawla gnignirb sgniht oh rof su ot peek ! ll’I llet uoy tuoba emos fo m…

线性代数向量内积_向量的外积| 使用Python的线性代数

线性代数向量内积Prerequisites: 先决条件&#xff1a; Defining Vector using Numpy 使用Numpy定义向量 Learn: how to code for outer product of two vectors using am inbuilt function in numpy library? 了解&#xff1a;如何使用numpy库中的内置函数为两个向量的外部乘…

c语言案例朗读工具源码,C语言编写简单朗读小工具(有源码)

原标题&#xff1a;C语言编写简单朗读小工具(有源码)最近不少人在后台留言说学C都是面对枯燥的控制台程序&#xff0c;能不能体现一下C语言的实际用途&#xff0c;今天我们就理论结合实践一把&#xff1a;C语言结合VBS脚本编写一个简单的朗读小工具&#xff0c;做一个能够发音的…

WAS集群系列(5):集群搭建:步骤3:安装IHS软件

选择“安装IBM HTTPServer”选项&#xff0c;点击“安装向导”。例如以下图提示&#xff1a; 安装提示&#xff0c;逐步点击“下一步”&#xff0c;当中偶有几处细节注意就可以。列举例如以下&#xff1a; &#xff08;1&#xff09;、产品安装路径与先前WAS软件所安装路径统一…

L1-056 猜数字 C语言,PAT L1-032 Left-pad

根据新浪微博上的消息&#xff0c;有一位开发者不满NPM(Node Package Manager)的做法&#xff0c;收回了自己的开源代码&#xff0c;其中包括一个叫left-pad的模块&#xff0c;就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块&#xff1f;就是在字符串…

单链表删除整表_单链表删除

单链表删除整表Deletion can be at various positions like: 删除可以在各个位置进行&#xff0c;例如&#xff1a; Deleting the first node 删除第一个节点 Deleting the last node 删除最后一个节点 Deleting the intermediate node 删除中间节点 删除单个链表中的第一个节…

WordPress数据表wp-options数据字段存JSON数据

2019独角兽企业重金招聘Python工程师标准>>> wp_options表是WordPress中最重要的表&#xff0c;一切程序设置、主题设置和绝大多数插件的设置大都保存在此表。 WordPress里面数据表wp-options数据字段存JSON数据 &#xff1a; a:90: {s:11:"^wp-json/?$"…

css scroll属性_CSS中的scroll-behavior属性

css scroll属性CSS | 滚动行为属性 (CSS | scroll-behavior property) Who does not want their links to function smoothly and attractively? This type of functionality is very easy to implement. All you need is a bit of awareness about the property that would h…

c 语言五子棋游戏代码,C语言案例:控制台版本的五子棋游戏【代码】

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼return true;}x;}return false;}bool isLeftInclinedWin(bool isBlack,int x,int y){char c isBlack ? :O;int count;while(x>0 && y>0 && state[x][y] c){y--;x--;}count 0;if(state[x][y] c) count 1…

基于HTML5 Canvas 实现弹出框

用户鼠标移入时&#xff0c;有弹出框出现&#xff0c;这样的需求很常见。这在处理HTML元素实现时简单&#xff0c;但是如果是对 HTML5 Canvas 构成的图形进行处理&#xff0c;这种方法不再适用&#xff0c;因为 Canvas 使用的是另外一套机制&#xff0c;无论在 Canvas 上绘制多…

半素数c语言,非常简单的c题目 不懂 紧急求助

1 半素数素数是指大于1且只有1和他本身两个因子的正整数&#xff0c;例如2、3、5、89都是素数&#xff0c;2、4、10都不是素数。在这里我给半素数下一个定义&#xff1a;一个大于1的正整数能分解为两个素数的乘积&#xff0c;那么这个正整数就是半素数&#xff0c;比如62*3&am…

JavaScript | 嵌套if的示例

Example: 例&#xff1a; In this example, we are reading salary of an employee and finding the discount and net pay based on given salary and discount rate. 在此示例中&#xff0c;我们正在读取员工的薪水&#xff0c;并根据给定的薪水和折扣率找到折扣和净工资。 …