HTTP头信息中的参数Etag
下面开始介绍 Etag:
Etag在HTTP1.1中有介绍,主要的作用就是在(css file, image, javascript file)文件后面添加一个唯一的参数(相当于查询参数字符串),Etag有服务器端生成,并且随着文件的改变而改变,这样浏览器端就会只重新请求获取 Etag发生变化的文件,减少浏览器端数据的流量,加快浏览器的反应速度,重要的是减轻服务器端的压力,所以服务器端Etag的实现就比较重要了。
现在我们有个问题为什么要使用Etag呢?
Etag主要为了解决Last-Modified无法解决的一些问题.他能比Last_Modified更加精确的知道文件是否被修改过.如果有个文件修改非常频繁,比如在秒以下的时间内进行修改,比如1秒内修改了10次,If-Modified-Since能检查只能秒级的修改,所以这种修改无法判断.原因是UNIX记录MTIME只能精确到秒.所以我们选择生成Etag,因为Etag可以综合Inode,MTime和Size,可以避免这个问题.
Etag的工作原理
Etag在服务器上生成后,客户端通过If-Match或者说If-None-Match这个条件判断请求来验证资源是否修改。我们常见的是使用If-None-Match.请求一个文件的流程可能如下:
新的请求
客户端发起HTTP GET请求一个文件(css ,image,js);服务器处理请求,返回文件内容和一堆Header(包括Etag,例如"2e681a-6-5d044840"),http头状态码为为200.
同一个用户第二次这个文件的请求
客户端在一次发起HTTP GET请求一个文件,注意这个时候客户端同时发送一个If-None-Match头,这个头中会包括上次这个文件的Etag(例如"2e681a- 6-5d044840"),这时服务器判断发送过来的Etag和自己计算出来的Etag,因此If-None-Match为False,不返回200,返回304,客户端继续使用本地缓存;
注意.服务器又设置了Cache-Control:max-age和Expires时,会同时使用,也就是说在完全匹配If-Modified-Since和If-None-Match即检查完修改时间和Etag之后,服务器才能返回304.
下面是在Apache中的Etag的配置
在Apache中设置Etag的支持比较简单,只需要在apache的配置中加入下面的内容就可以了:
FileETag MTime Size
注解:FileETag指令配置了当文档是基于一个文件时用以创建ETag(实体标签)应答头的文件的属性(ETag的值用于进行缓冲管理以节约网络带宽)。ETag的值由文件的inode(索引节点)、大小、最后修改时间决定。FileETag指令可以让您选择(如果您想进行选择)这其中哪些要素将被使用。主要关键字如下:
INode
文件的索引节点(inode)数
MTime
文件的最后修改日期及时间
Size
文件的字节数
All
所有存在的域,等价于:FileETag INode MTime Size
None
如果一个文档是基于文件的,则不在应答中包含任何ETag头
在大型多WEB集群时,使用ETag时有问题,所以有人建议使用WEB集群时不要使用ETag,其实很好解决, 因为多服务器时,INode不一样,所以不同的服务器生成的ETag不一样,所以用户有可能重复下载(这时ETag就会不准),明白了上面的原理和设置后,解决方法也很容易,让ETag后面二个参数,MTime和Size就好了.只要ETag的计算没有INode参与计算,就会很准了.
如果动态程序要生成ETAG 也很简单,如: $etag = ‘”‘ . md5($body) . ‘”‘;
相关文章:

利用JS使用POST方式提交请求的方法
2019独角兽企业重金招聘Python工程师标准>>> function post(url, params) {var temp document.createElement("form");temp.action url;temp.method "post";temp.style.display "none";for (var x in params) {var opt document…

input框取消光标颜色手机端不生效
<style> input{ color:transparent; } </style> <input value"我要隐藏光标">//文字颜色可以使用text-shadow属性<style> input{ color:transparent; text-shadow:0 0 0 red; } </style> PC端没问题,但是手机端测试无效。…

http响应Last-Modified和ETag以及Apache和Nginx中的配置
基础知识 1) 什么是”Last-Modified”? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样: …

全面分析再动手的习惯:链表的反转问题(递归和非递归方式)
定义一个方法(函数),实现输入一个链表的头结点,然后可以反转这个链表的方向,并输出反转之后的链表的头结点。 typedef struct Node{int data;Node *next; } Node, *List; 链表类的问题,涉及到了很多指针的操…

Facebook 正在研究新型 AI 系统,以自我视角与世界进行交互
编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)你是否能想象 AI 以第一人称视角来理解世界是什么样的呢?未来,以第一人称视角理解世界的 AI 可以开启沉浸式体验的新时代。增强现实(AR)眼镜和虚拟现实&…

docker-2-简单使用docker-ce
安装请看docker-ce安装文档 docker命令合集 参考docker --help 选项 -D 使用debug模式-l 日志级别(有debug|info|warn|error|fatal),默认info-v 显示版本管理命令config 管理docker配置container 管理容器image 管理镜像network 管理网络service swarm 常用命令atta…

Apache启用mod_expires模块
mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。 在使用之前,首先要确认一下”mod_expires”模组是否有启用.如果是自己安装Apache来架设网页主机的话,这里我们可以透过编辑Apache的”ht…

用 Pyecharts 制作炫酷的可视化大屏
作者 | 俊欣来源 | 关于数据分析与可视化前两篇Pyecharts的文章来帮我们简单的梳理了一下可以用Pyecharts来绘制哪些图表之后,本篇文章我们用pyecharts里面的一些组件,将绘制的图表都组合起来首先Grid组件首先介绍Pyecharts模块当中的Grid组件࿰…

compass安装使用960 Grid System
960 Grid System 是一个CSS的页面布局框架 demo: http://960.gs/demo.html 前提:安装Ruby 、NodeJS 步骤1:在命令行下安装css插件: gem install compass-960-plugin 步骤2:创建my_project项目: compass create -r nin…
C语言竟成TIOBE年度编程语言候选!苹果iPhone 7卖得最好!
每年这个时候,都是TIOBE榜单评选年度编程语言的时候。今年,Kotlin成为竞争的热门,让人意外的是,C语言居然也成为了候选编程语言之一。自从被Java摘走王者桂冠,C语言几乎是处于持续下滑状态,没想到2017年竟然…

奇怪吸引子---QiChen
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性、稳定性、吸引性。吸引子是一个数学概念,描写运动的收敛类型。它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集…

简介+原理+绘制,详解 Python「瀑布图」的整个制作流程!
作者|黄伟呢来源|数据分析与统计学之美简介瀑布图,由麦肯锡顾问公司所独创的图表类型,因为形似瀑布流水,所以被大家称之为瀑布图(Waterfall Plot),在企业经营分析、财务分析中使用较多,用以表示企业成本的构成、变化等…

Ubuntu 忘记root登录密码的解决办法
2019独角兽企业重金招聘Python工程师标准>>> 之前做了个虚拟机,最近需要用到,密码忘记了,下面是在忘记密码的情况下登录系统休修改密码,需要进入GRUB修改kernel镜像启动参数 1、重启电脑长按shift键直到进入下图进入GR…

10月21日!API 大赛决赛暨移动云开发者论坛邀您见证数字创新的力量
2021年7月,移动云API应用创新开发大赛正式启动,历时近两个月的时间,共计报名889人,最终提交作品166项。经过前期初审、初赛、复赛等环节,最终企业、移动和高校赛道共29个目团队成功问鼎移动云API应用创新开发大赛决赛榜…

负载均衡环境中和如何设置Expires和Etag
在负载均衡环境中(LVS, LoadBalance)为了减少浏览器数据的重复请求操作,一般需要设置 Http Header 的 Etage 和 Expires 告诉浏览器请求数据是否已过期。以下内容主要考虑Apachesquid 环境 ETag Header是文件修改时间、文件大小和inode号生成…

C++之typedef 小记
2019独角兽企业重金招聘Python工程师标准>>>  以前曾不知道为何要用typedef,随着开发的深入,真正感受到了其内涵所在: 1.如:typedef int DataType 接下来项目中的几万行代码中,如果…

Android Go初探
Android Ore(Go edition) 简介: Android Go并不是一个独立的操作系统,它只是Android O的一种轻量级配置方案,专为1GB以下内存的机型设计, 在这种设置下,一些消耗大量资源的功能将被关闭,同时预装的应用也是…

Apache HTTP Server Version 2.2 文档中文版
模块索引 | 指令索引 | 常见问题 | 词汇表 | 站点导航 Apache HTTP Server 版本2.2 Apache > HTTP Server > 文档 > 版本2.2致谢 | 本篇译者:金步国(其他作品) | 本页最后更新:2006年10月20日[查看最新版本] 电信镜像 网通镜像Apache HTTP Ser…

归一化变换 Normalizing transformations
归一化变换包含两个部分,图像坐标的平移和尺度的缩放。进行归一化的变换不但能够提高处理结果的精确度,而且通过选择一个标准的坐标系预先的消除了图像尺度和坐标原点的选择对算法最终结果的影响。 归一化变换的步骤: 对点进行平移࿰…

Arm 通过虚拟硬件与新的解决方案导向的产品 带动物联网经济转型
Arm物联网全面解决方案通过一套全栈式解决方案,大幅加速产品开发进程并提高投资回报率;Arm虚拟硬件使得开发无需基于实体芯片进行,促成软件与硬件的共同设计,让产品开发时间最多缩短两年;Project Centauri作为Arm新的生…

数据库设计 之设计 表字段类型
2019独角兽企业重金招聘Python工程师标准>>> 数据库设计 之设计 表字段类型 博客分类: sql 之前没有 数据库设计的一些经验。 这次数据库设计。由于需求原因和没经验原因。 一些数字类型的字段设计成了varchar2 一些日期类型的字段也设计成了varchar2 一…

Apache关掉Etag和Last-Modified的方法
Apache关掉Etag和Last-Modified的方法,可能也只有我这种无聊的人才会做这种事情.哈哈,关掉etag和last-modified会出现什么样的情况。做一个这样的测试. 不要问我这二个参数是做什么的。。。。。在我的blog中有写. Etag关掉的方法如下,加一个none FileETag none …

P2P最易遭受的DDoS***以及防御手段
从07年的爱沙尼亚DDoS信息战,到2009年广西南宁30个网吧遭受到DDoS勒索,再到新浪网遭受DDoS***无法提供对外服务500多分钟。DDoS愈演愈烈,***事件明显增多,***流量也明显增大,形势十分严峻,超过1G的***流量频…
从飞天到倚天 阿里云底层自研技术大爆发
10月20日,2021云栖大会上,阿里云发布了倚天、磐久、神龙4.0、龙蜥、灵杰等多款重磅产品,阿里云“做深基础”成果浮出水面,底层自研技术迎来大爆发。 阿里云智能总裁张建锋表示,过去十二年,阿里云打造出中国…

CSS vs. JS Animation: 哪个更快
CSS vs. JS Animation: 哪个更快? CSS vs. JS Animation: 哪个更快? 基于JavaScript的动画竟然已经默默地比CSS的transition动画快了?而且,Adobe和 Google竟然一直在发布可以媲美原生应用的富媒体移动站点? 这篇文章将会逐点讲解基于JavaSc…

Squid下Http头信息优先级
no-cache>Expires>refresh_pattern>Last-Modified 也就是讲,最前面的最重要,前面的生效后,后面的基本就失效了. 另外squid本身就能对比Last-Modified,但根据我的测试,Etag还是会要向源服务器发送请求头,来确认etag的. ETag默认是需要向源网站…

阿里云PolarDB数据库将云原生进行到底!业内首次实现三层池化
10月20日,在2021云栖大会上,阿里云宣布自研云原生关系型数据库PolarDB重磅升级,实现内存池化、多主架构、HTAP实时分析等创新功能,进一步引领云原生数据库技术的持续创新。 阿里云智能数据库事业部总负责人李飞飞表示,…

zencoding实践
2019独角兽企业重金招聘Python工程师标准>>> .container<div class"container"></div>.wrap>ul>.list>.site <div class"wrap"><ul><li class"list"><div class"site"></…

第三期 OSI七层中第一层 物理层
物理层1、信号1)信息2)数据3)信号:信息传递的媒介 4)信号的分类:模拟信号:连续变化的物理量。数字信号:不连续的物理量,信号参数也不连续变化,高低固定。5&am…

Squid的refresh_pattern配置
refresh_pattern 大概是 squid 最有意思但最不好懂的配置参数了。 记住refresh_pattern 只对后端没设置Expires过期时间的页面起作用,比如论坛页面;而对类似apache mod_expires 设置过的页面不起作用。 说明之前,先将个概念LM,L…