`
kenby
  • 浏览: 717498 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)http响应Last-Modified和ETag

 
阅读更多

基础知识
  1) 什么是”Last-Modified”?
  在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样:
  Last-Modified: Fri, 12 May 2006 18:53:33 GMT
  客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:
  If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT
  如果服务器端的资源没有变化,则自动返回 HTTP 304 (Not Changed.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。
  2) 什么是”Etag”?
  HTTP 协议规格说明定义ETag为“被请求变量的实体值” (参见 —— 章节 14.19)。 另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能是JSON或XML文档。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端,以下是服务器端返回的格式:
  ETag: "50b1c1d4f775c61:df3"
  客户端的查询更新格式是这样的:
  If-None-Match: W/"50b1c1d4f775c61:df3"
  如果ETag没改变,则返回状态304然后不返回,这也和Last-Modified一样。本人测试Etag主要在断点下载时比较有用。
  Last-Modified和Etags如何帮助提高性能?
  聪明的开发者会把Last-Modified 和ETags请求的http报头一起使用,这样可利用客户端(例如浏览器)的缓存。因为服务器首先产生 Last-Modified/Etag标记,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存。
  过程如下:

  1. 客户端请求一个页面(A)。
  2. 服务器返回页面A,并在给A加上一个Last-Modified/ETag。
  3. 客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。
  4. 客户再次请求页面A,并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器。
  5. 服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。

分享到:
评论

相关推荐

    浏览器缓存技术介绍以及优化建议

    强缓存通过这些头部直接决定是否使用缓存,而协商缓存则通过`Last-Modified`/`If-Modified-Since`或`ETag`/`If-None-Match`与服务器通信来验证资源是否更新。Service Worker提供了更细粒度的缓存控制,支持离线应用...

    panos-scanner:确定远程GlobalProtect门户或管理界面的Palo Alto PAN-OS软件版本

    :information: 注意:在PAN-OS v10.0.4中,Palo Alto似乎已停止为各种Web资源提供ETag... 为了帮助PAN-OS用户修补防火墙,此扫描程序检查了几个静态Web资源的Last-Modified和ETag HTTP响应标头,并将这些值与特定的PAN-

    asp.net RewritePath重定向HTTP头Content-Location暴露真实路径解决方法

    ASP.NET使用RewritePath重定向后,服务器响应的HTTP头会多个Content-Location...Last-Modified: Tue, 18 Dec 2012 15:01:50 GMT Accept-Ranges: bytes ETag: “e119ee9b30ddcd1:1c48” Server: Microsoft-IIS/6.0 X-Pow

    Is It Cached?-crx插件

    开发人员工具的此扩展为您提供有关单个表中所有相关请求标头(方法,if-modified-since,if-none-match)和响应标头(cache-control,pragma,last-modified,etag)的概述。 。 它还会检测是否通过CDN提取了元素,...

    在ASP.NET中支持断点续传下载大文件(ZT)

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。...Last-Modified:可选响应头,存放服务端文件的最后修改时间,用于验证 二. 一个重要请求

    Tomcat中对静态资源的处理教程

    设置响应头域,如 Content-Type、Content-Length、ETag、Last-Modified 检查是否满足 Sendfile 的条件,否则将内容拷贝到输出流中 接下来主要分析资源缓存的设计和实现,以及 If 头域的处理。 1. 资源缓存的设计 ...

    vapr-conditionals:一个Vapr插件,用于处理条件请求

    具体来说,它处理 If-Match、If-None-Match、If-Modified-Since 和 If-Unmodified-Since 标头,同时为客户端提供 ETag 和 Last-Modified 标头。 条件请求可以通过节省不经常更改的响应的带宽来提高服务器的效率,...

    interview:fe面试

    页面性能指标: dns查询,一般500ms(使用dns缓存,20ms以内)协商缓存(last-modified,etag) tcp链接和ssl(https特殊的数据传输过程)大约200毫秒请求响应,内容传输dom解析(600ms左右)资源加载(http1.1同一...

    Etag和Expires 性能调优

    2、静态下Apache、Lighttpd和Nginx中Etag和Expires配置3、非实时交互动态页面中Etag和Expires处理在客户端通过浏览器发出第一次请求某一个URL时,根据 HTTP 协议的规定,浏览器会向服务器传送报头(Http Request ...

    HTTP协议详解

    13.8 错误和不完全的响应缓存行为 13.9 GET 和 HEAD 的副作用(Side Effects of GET and HEAD) 13.10 在更新或删除后的无效性 13.11 强制写通过( Write-Through Mandatory) 13.12 缓存替换 (Cache Replacement)...

    10分钟彻底搞懂Http的强制缓存和协商缓存(小结)

    浏览器缓存 浏览器缓存是浏览器在本地磁盘对用户最近请求过的文档...在第一次请求时,服务器会将页面最后修改时间通过Last-Modified标识由服务器发送给客户端,客户端记录修改时间;服务器还会生成一个Etag,并发送给

    Http1.1超文本传输协议中文版

    13.3.1最后修改日期 (Last-Modified Dates) 80 13.3.2 实体标签缓存验证器(Entity Tag Cache Validators) 80 13.3.3 强,弱验证器 (Weak and Strong Validators) 81 13.3.4 关于何时使用实体标签和最后修改时间...

    开涛高可用高并发-亿级流量核心技术

    10.2.1 Last-Modified 184 10.2.2 ETag 190 10.2.3 总结 192 10.3 HttpClient客户端缓存 192 10.3.1 主流程 195 10.3.2 清除无效缓存 195 10.3.3 查找缓存 196 10.3.4 缓存未命中 198 10.3.5 缓存命中 198 10.3.6 ...

    fresh:HTTP请求新鲜度测试

    使用请求和响应标头检查响应的新鲜度。 当客户端缓存中的响应仍然“新鲜”时,返回true ,否则返回false ,以指示客户端缓存现在已过时,应发送完整的响应。 当客户端发送Cache-Control: no-cache请求标头以指示...

    xUtils3 demo

    // 返回 false 继续请求网络, 但会在请求头中加上ETag, Last-Modified等信息, // 如果服务端返回304, 则表示数据没有更新, 不继续加载数据. // this.result = result; return false; // true: 信任缓存数据, 不...

Global site tag (gtag.js) - Google Analytics