Expires,Cache-Control,Last-Modified,ETag_response header last-modified etag date-程序员宅基地

技术标签: WEBUI  Cache-Control  ETag  Expires  Last-Modified  

Expires、Cache-Control、Last-Modified、ETag都是在http response的返回header中
用来控制浏览器客户端缓存行为的。
1.Expires在HTTP/1.0中已经定义,Cache-Control:max-age=xxx在HTTP/1.1中才有定义,
为了向下兼容,仅使用max-age不够。
当某一个web资源被访问后,会被浏览器缓存,在以后对相同资源再次访问的时候浏览器会
检查缓存是否过期。
Expires指定的值为日期,在指定的日期到达之前再次访问则认为缓存有效。
max-age指定的值为多少秒,距第一次访问多少秒后再次访问则认为缓存有效。
这时候是不会发生网络请求的。
场景:1,用户在浏览器里输入一个曾经访问过的网址,2,点击URL link(href)链接到一个曾经访问
过的资源。3,网页中静态的JS,CSS,图片资源。

Last-Modified的值为一个日期,是资源最近一次修改的时间。
ETag的值为服务器对请求的资源的内容按照hash算法计算的一个值,当内容
发生改变的时候,这个值会相应的改变。

Expires和Cache-Control控制浏览器是否做缓存,如果缓存,缓存的有效期为多久。Expires值为-1和0不缓存。Cache-Control的值为no-cache不缓存.
Last-Modified和ETag是在缓存过期后到服务器做验证的时候的比较值。Last-Modified只能精确到秒级别,如果要到毫秒级别,就要用ETag.

当缓存过期后,浏览器会向服务器发送请求。
这时候request header会带上If-Modified-Since和If-None-Match参数。
If-Modified-Since的值为缓存中最初收到的Last-Modified的值。
If-None-Match的值为缓存中最初收到的ETag的值。
如果最初的返回中没有Last-Modified和ETag的值则不会带上这个请求参数。
服务器收到后会“验证”,如果相同则返回一个“304 Not Modified”响应,
不会将内容再传一次,节省了带宽。
场景:1,访问的时间在Expires日期之后或者max-age指定的时间之后,2,用户按F5刷新.

还有一种情况是用户按 CTRL+F5,这时候浏览器会在请求头中带上
Pragma参数,值为no-cache,同时在request header中去掉If-Modified-Since和If-None-Match。
服务器收到请求后会将内容重新传给浏览器,不管内容是否变化,就像是浏览器第一次请求一样。
响应码是200 ok。

下面是在JAVA代码中设置这些参数的方法:
//不允许浏览器端或缓存服务器缓存当前页面信息。    
response.setDateHeader("Expires", 0);  
response.addHeader( "Cache-Control", "no-cache" );
//本页面允许在浏览器端或缓存服务器中缓存,时限为10秒。
java.util.Date date = new java.util.Date();  
response.setDateHeader("Expires",date.getTime()+10000);
response.addHeader( "Cache-Control", "max-age=10" );
//设置修改时间
response.setDateHeader("Last-Modified",date.getTime());

在nginx中实验,nginx可以通过expires 或者add_header配置来为
response header添加 Expires和Cache-Control参数。
默认不指定的时候,response header如下,没有Expires和Cache-Control参数。
这时候默认有Last-Modified和Etag值,多次访问不会发生网络请求。
Connection    keep-alive
Date    Wed, 27 Nov 2013 05:17:24 GMT
Etag    "52957fcb-37"
Last-Modified    Wed, 27 Nov 2013 05:14:51 GMT
Server    nginx/1.5.7
nginx指定expires -1d,意思是过期时间为一天前。
这时候每次再次访问相同资源都会到服务器"验证",然后得到一个304返回.
Cache-Control    no-cache
Connection    keep-alive
Date    Wed, 27 Nov 2013 06:52:20 GMT
Etag    "5295898b-b6"
Expires    Tue, 26 Nov 2013 06:52:20 GMT
Last-Modified    Wed, 27 Nov 2013 05:56:27 GMT
Server    nginx/1.5.7
nginx指定expires 1d,意思是过期时间为一天后。
这时候每次再次访问相同资源,浏览器不会像服务器发请求。
这时候如果资源内容有改变,浏览器也不会知道。

当然如果你F5或者CTRL+F5可以看到最新的内容。

Cache-Control还可以设置的其它值:


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kkdelta/article/details/16985769

智能推荐

AspectJ 使用注解替代xml_aspectj-autoproxy 注解替换-程序员宅基地

文章浏览阅读179次。@Service("userService")public class UserServiceImpl implements IUserService { private String name; public String getName() { return name; } public void setName(String name..._aspectj-autoproxy 注解替换

PostgreSQL备份恢复之pgbackRest恢复_pgbackres恢复到新库-程序员宅基地

文章浏览阅读1k次。接着上一篇pg备份文档:https://blog.csdn.net/weixin_41561946/article/details/104183555六、 pgbackRest恢复1. 查看现有备份[cddb@cddb-node1 ~]$ pgbackrest infostanza: demostatus: okcipher: aes-256-cbcdb (current)wal ..._pgbackres恢复到新库

ESP8266 SDK开发 PWM呼吸灯_non-os 2.2.0 pwm-程序员宅基地

文章浏览阅读524次。本例程基于ESP8266 NONOS 2.0 的PWM呼吸灯LED为IO4引脚程序如下:#include "user_config.h" // 用户配置#include "driver/uart.h" // 串口#include "c_types.h" // 变量类型#include "eagle_soc.h" // GPIO函数、宏定义#include "ets_sys.h" // 回调函数#include "os_type.h" // os_XXX#i_non-os 2.2.0 pwm

无人船应用_无人运输船运用-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏27次。研制的无人船预期的目标:1. 智能导航:高精度GNSS(GPS、Galileo、GLONASS、BeiDou);高精度陀螺仪;2. 可折叠式船体设计:无人船采用采用充气式双体结构,浮体为进口1.2mm厚高分子PVC夹网材料,便于无人船的携带和组装;平台支架为316高强度不锈钢材料,采取可拆卸方式,便于无人船的组装和维护;3. 无人操控:无人船可通过遥控器远程操控,也_无人运输船运用

华为申请鸿蒙星河和HarmonyOS NEXT 商标,有望年内发布-程序员宅基地

文章浏览阅读40次。华为技术有限公司申请注册“鸿蒙星河”“HarmonyOS NEXT”商标,国际分类为科学仪器,当前商标状态均为等待实质审查。此前在 1 月 18 日举行的鸿蒙生态千帆启航仪式上,华为宣布HarmonyOSNEXT 鸿蒙星河版系统开发者预览版开放申请,将在 Q2(第二季度)启动开发者 Beta 计划,Q4(第四季度)发布商用版。HarmonyOS NEXT 开发者预览版将不再兼容安卓开源应用,仅...

初识sethc.exe进程-程序员宅基地

文章浏览阅读1.7k次。昨天手贱把administrator账户禁用了后来重启发现你的账户已被停用。请向系统管理员咨询! 本想着重启按F8进入安全模式用CMD命令解除administrator账户。于是无效,原来win10系统下安全模式模块已经放在更新与恢复下面。解决方法:1.进入PE系统修改sethc.exe进程,找到C:\Windows\system32路径下sethc.exe改为sethc.exe.bf_sethc.exe

随便推点

Hive与HBase实现数据互导_hbase通过hive导出数据-程序员宅基地

文章浏览阅读1.8w次。Hive与HBase实现数据互导建立与HBase的识别表hive> create table hive_hbase_1(key int,value string) > stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' > WITH SERDEPROPERTIES ("hbase.columns.ma_hbase通过hive导出数据

潮流计算程序————电力网络的节点编号优化(Tinney-1编号)(Python语言描述)_节点优化编号-程序员宅基地

文章浏览阅读1.8k次。Tinney-1编号import numpy as npdef tinney_1(id): it = np.mat(np.zeros((1, len(id)))) flag = np.mat(np.zeros((1, len(id)))) k = 1 newnum = 0 while 1: have = 0 for i in range(len(id)): if flag[0, i] == 0: _节点优化编号

octomap rviz gazebo_octomap python-程序员宅基地

文章浏览阅读148次。roslaunch aubo_gazebo aubo_i5_gazebo.launchroslaunch aubo_i5_moveit_config moveit_rviz.launch config:=trueroslaunch collisiondetection octomap_display.launch_octomap python

【Docker】Docker 启动prometheus报错 parsing YAML file /etc/prometheus/prometheus.yml: yaml: unmarshal_failed: parsing yaml file alert.yml: yaml: unmarsh-程序员宅基地

文章浏览阅读4.6k次。1.背景本地docker 安装prometheus,然后启动,报错如下(base) lcc@lcc grafana-storage$ docker logs 790f84fb094904a96b8d16ce808bdee20ecdd7e40c875f4cf2b659d61efc68aclevel=info ts=2020-05-12T00:55:58.114Z caller=main.go:302 msg="No time or size retention was set so using the._failed: parsing yaml file alert.yml: yaml: unmarshal errors: line 1: field g

UART协议总结_uart握手-程序员宅基地

文章浏览阅读2.8k次。这篇总结下UART简介UART,Universal Asynchronous Receiver/Transmitter的简称,通用的异步收发传输器。有三根线,TX,RX,GND,拓扑如下:特点TX,RX在空闲时状态都为逻辑1先发送字节低位,再发送字节高位起始位:先发出一个逻辑0的信号,标识传输数据的开始。数据位:紧接起始位之后,数据位个数可以是7位、8位、9位长校验位:可选..._uart握手

CentOS 7 安装 MySQL 8-程序员宅基地

文章浏览阅读207次。CentOS 7 安装MySQL 81.下载2.解压1.下载打开 [MySQL 官方下载地址](https://downloads.mysql.com/archives/community/)选择我们要安装的版本 32位系统选择第一个 64位系统选择第二个2.解压创建 tar.xz 文件命令:tar cvf xxx.tar xxx/ 得到 xxx.tar文件,然后 xz ...

推荐文章

热门文章

相关标签