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参于计算,就会很准了.
分享到:
相关推荐
Etags原理:Add an Expires header已经对浏览器缓存机制中的Cache-Control和Expires进行了配置,这一条评测的是另外两个:Last-Modified和ETag。简单的说,即使设置了文件的期限,浏览器在访问资源时也会因为Last-...
它的工作原理是服务器在发送响应时附带一个`Etag`头,客户端(如浏览器)会保存这个值。当客户端再次请求同一资源时,它会在If-None-Match头中包含之前的`Etag`值。如果资源未改变,服务器只需返回304 Not Modified...
Etag和Expires是两种常见的HTTP缓存策略,它们各自有不同的工作原理和应用场景。本文将深入探讨这两种机制,以及如何在Apache、Lighttpd和Nginx等服务器上进行配置,以实现更高效的页面缓存。 首先,我们来看Last-...
1、Etag和Expires中Client 端Http Request Header及Server端Http Reponse Header工作原理。2、静态下Apache、Lighttpd和Nginx中Etag和Expires配置3、非实时交互动态页面中Etag和Expires处理在客户端通过浏览器发出第...
ETag的工作原理是,当客户端(如浏览器)首次请求一个资源时,服务器会返回该资源及其对应的ETag值。ETag是一个唯一的字符串,它基于资源的内容生成,因此如果资源内容改变,ETag也会随之更新。下次客户端再次请求...
### WebKit和Chromium源码及原理剖析 #### 第1篇 Web开发须知的浏览器内幕:缓存与存储篇(2) **3. HTTP Cache综述** - **HTTP Cache概念**: - HTTP缓存机制遵循IETF规范设计,最新的标准文档为[RFC 7234]...
首先,我们要了解Nginx的工作原理。Nginx采用事件驱动模型,非阻塞I/O模式,能同时处理大量连接,特别适合于处理大量的短连接请求。其主要工作包括:HTTP服务器、反向代理、负载均衡和邮件服务器。 **一、优化Nginx...
这篇文章将深入探讨mkprj插件的功能、工作原理以及它如何利用etag提升效率。 首先,我们来理解什么是etag。ETag(Entity Tag)是HTTP协议中的一种机制,用于标识资源的版本或状态。服务器通过返回一个唯一的ETag给...
`etag-cache`库正是基于这样的原理,为HTTP请求提供了一种智能的缓存策略。它将ETag作为资源的唯一标识,存储在本地。当用户发起相同请求时,库会检查ETag,若本地ETag与服务器返回的ETag匹配,表明资源未发生变化,...
总结来说,理解浏览器缓存的工作原理并合理配置,有助于优化网站性能,提高用户体验。通过精细调整HTTP响应头,我们可以确保用户既能快速访问到页面,又能及时获取最新的信息,同时减轻服务器的负载。在实际开发中,...
**Ajax第一讲:Ajax基本原理...总结,Ajax是现代Web开发中不可或缺的一部分,理解其基本原理和工作流程,有助于提升网站的交互性和效率。通过不断实践和学习,你可以更加熟练地运用Ajax来构建动态、响应式的网页应用。
了解并掌握Nginx的核心功能、配置及优化技巧是每个Web开发者和系统管理员必备的技能之一。本资料集合了机构内训的专业面试题,旨在帮助求职者全面理解Nginx的相关知识点。 1. **Nginx的基本概念与工作原理** - ...
3. **缓存配置**:利用Etag、Last-Modified等机制进行缓存,减轻服务器压力。 4. **JVM调优**:优化Java虚拟机参数,如堆内存大小、垃圾收集策略等。 5. **部署优化**:避免过多的Web应用部署在同一Tomcat实例上,以...
本学习资料旨在帮助大家深入理解Web服务器的工作原理、配置及优化技巧。 一、Web服务器的基本概念 1. HTTP协议:Web服务器的核心是HTTP协议,它是互联网上应用最为广泛的一种网络协议,用于从WWW服务器传输超文本到...
这两本书籍旨在帮助读者深入理解HTTP协议的工作原理以及Lighttpd服务器的内部机制。 首先,我们来详细探讨"图解HTTP"。HTTP(Hypertext Transfer Protocol)是互联网上应用最广泛的一种网络协议,用于在Web浏览器和...
本文将深入探讨 Gzip 的工作原理,以及如何通过合理配置和使用 `compression-webpack-plugin` 进行优化。 **Gzip 工作原理** Gzip 是一种基于 DEFLATE 压缩算法的文件格式,它通过查找并替换重复的数据块来减小文件...
开发者可以通过阅读源码了解其工作原理,参考示例代码进行集成,测试用例可以帮助验证功能的正确性。此外,由于这是一个开源项目,开发者还可以参与到项目的贡献中,比如发现并修复bug,或者提出和实现新特性,以...
Apache 2.2 是一款广泛使用的开源Web服务器软件,它提供了高效、稳定和安全的平台,用于托管网页和应用程序。...通过深入学习,用户不仅可以了解Apache的工作原理,还能掌握如何有效地管理和优化Web服务器。
内容包括配置缓存控制策略和处理ETag等。 10. **翻译(Translations)**: 对于多语言的应用,Symfony框架提供了强大的国际化和本地化支持。Symfony文档介绍了如何实现多语言功能,包括消息翻译的处理。 11. **服务...
本文重点讲述如何使用Nginx配置协商缓存的过程,以及协商缓存的工作原理,帮助大家在日常的Web开发和维护中,更好地控制Web资源的缓存行为。 一、强缓存与协商缓存的区别 强缓存指的是浏览器根据浏览器自身缓存策略...