`
liulanghan110
  • 浏览: 1064014 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

HTTP缓存ETAG和Last-Modified

 
阅读更多

基础知识 
        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和一个空的响应体。

分享到:
评论

相关推荐

    HTTP缓存头Last-Modified和ETag介绍

    主要介绍了HTTP缓存头Last-Modified和ETag介绍,需要的朋友可以参考下

    http协议-缓存控制:etag If-None-Match / Last-Modified If-Modified-Since

    NULL 博文链接:https://hyj1254.iteye.com/blog/1161000

    node-modified:修改后是一个简单的请求客户端来处理http本地缓存

    修改last-modified的HTTP规范,实现了last-modified , if-modified-since , etag , if-none-match 。概要Modified是根据构建的,并通过缓存支持对其进行修饰,因此,如果您熟悉请求,则几乎可以使用修改了。 var...

    浏览器缓存机制

    浏览器缓存机制、Expires策略(http1.0)和Cache-control策略(http1.1)、Last-Modified/If-Modified-Since、ETag/If-None-Match

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

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

    RemETag_去除iis的etag_配置ETag_iis性能优化

    Etags原理:Add an Expires header已经对浏览器缓存机制中的Cache-Control和Expires进行了配置,这一条评测的是另外两个:Last-Modified和ETag。简单的说,即使设置了文件的期限,浏览器在访问资源时也会因为Last-...

    浏览器之HTTP缓存的那些事

    浏览器之HTTP缓存的那些事 什么是浏览器缓存 浏览器HTTP执行机制 缓存模式 缓存相关的Http Header Cache-Control Expires Last-Modified ETag

    httplib2:适用于Python的小型快速HTTP客户端库。 具有持久的连接,缓存和Google App Engine支持。 最初由Joe Gregorio撰写,现在得到社区的支持

    HTTP和HTTPS 仅当套接字模块使用SSL... 消化基本的WSSE快取该模块可以选择与可理解Cache-Control:标头并使用ETag和Last-Modified缓存验证器的专用缓存一起运行。所有方法该模块可以处理任何HTTP请求方法,而不仅仅是

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

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

    node.js实现http服务器与浏览器之间的内容缓存操作示例

    本文实例讲述了node.js实现http服务器与浏览器...三、通过使用 Last-Modified / If-Modified-Since 来进行缓存判断 1、Last-Modified 是服务器向客户端发送的头信息,用于告诉客户端资源的 最后修改时间,该信息浏览器

    Apache环境下PHP利用HTTP缓存协议原理解析及应用分析

    一、先来看第一种情况:apache 静态页面 apache发送给客户端的静态页面一般包含Last-Modified和Etag,这两个标签的值来自静态文件的修改时间和inode。 下面是截取得apache返回客户端的头 XML/HTML代码 复制代码 ...

    HTTP协议Header详解.html

    25 If-Modified-Since 26 26 If-None-Match 27 27 If-Range 28 28 If-Unmodified-Since 28 29 Last-Modified 29 30 Location 29 31 Max-Forwards 29 32 Pragma 30 33 Proxy-Authenticate 30 34 Proxy-Authorization ...

    Android代码-xUtils3

    缓存(支持Cache-Control, Last-Modified, ETag等特性)的支持. 有了强大的http及其下载缓存的支持, image模块的实现相当的简洁, 并且支持回收被view持有, 但被Mem Cache移除的图片, 减少页面回退时的闪烁.. view注解...

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

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

    浅谈Ajax的缓存机制

    只要是URL相同的GET请求,浏览器会使用缓存(当然还要看服务器的Cache-Control/Expires/Last-Modified/ETag头的设置)。 只要是POST请求,浏览器都不会缓存。 Https的请求,浏览器不会缓存(绝大数情况如此,但是也有...

    sushy:带有静态文件后端的wikiblogging引擎

    (出于大型网站上的性能问题而删除) HTTP缓存( Etag , Last-Modified , HEAD支持等) 网站地图OpenSearch支持(在某些浏览器中直接从多功能框进行搜索) Atom提要CSS内联基于multiprocessing的索引器(在feature...

    Etag和Expires 性能调优

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

    Is It Cached?-crx插件

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

Global site tag (gtag.js) - Google Analytics