`

HTTP If-None-Match和ETag , If-Modified-Since和Last-Modified

阅读更多

 

If-Modified-Since(浏览器) = Last-Modified(服务器)
作用:浏览器端第一次访问获得服务器的Last-Modified,第2次访问把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最

后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就

会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中.
例如:If-Modified-Since: Thu, 09 Feb 2012 09:07:57 GMT

 

If-None-Match(浏览器) = ETag(服务器)
作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资

源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资

源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 

使用这样的机制将提高网站的性能
例如: If-None-Match: "03f2b33c0bfcc1:0"

 

 

String df = request.getHeader("If-None-Match")==null?"":request.getHeader("If-None-Match");
    	String dd = request.getHeader("If-Modified-Since")==null?"":request.getHeader("If-Modified-Since");
    	System.out.println("--"+df+"--"+dd);
//     	response.setDateHeader("Last-Modified", Long.parseLong(json.get("UP").toString()));
    	String token = "w/\"" + DateUtil.parseDate(new Date(),"yyyy-MM-dd HH:mm") + '"';   
    	response.setHeader("ETag", token);
//    	response.setDateHeader("Expires",System.currentTimeMillis()+10000);
    	
    	if(token.equals(df)){System.out.println("ETag match: returning 304 Not Modified! ");  
    		//response.setStatus(304);
    		response.sendError(HttpServletResponse.SC_NOT_MODIFIED);  
//    		getResponse().setStatus(304);
    		response.setHeader("Last-Modified", dd);  
    	}else{
    		System.out.println("new! "); 
        	response.getWriter().write("rs");
        	response.getWriter().flush();
        	//response.setHeader("Last-Modified", token);
    	}
 

 

 

分享到:
评论

相关推荐

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

    本文将深入探讨两个关键的缓存机制:Etag与If-None-Match以及Last-Modified与If-Modified-Since。 1. Etag与If-None-Match: Etag(Entity Tag)是一种用于标识资源版本的机制。服务器在响应头中设置Etag,它通常是...

    Caching HTTP Headers, Last-Modified and ETag

    当客户端(浏览器)向服务器请求资源时,如果之前已经获取过该资源,它会在请求中包含一个 `If-Modified-Since` 头,带上上次获取资源时记录的 `Last-Modified` 时间戳。如果服务器发现资源自那时以来未被修改,它会...

    HTTP缓存头Last-Modified和ETag介绍

    当浏览器再次请求该资源时,它会将上次接收到的Last-Modified值通过`If-Modified-Since`头部发送回服务器,询问服务器资源是否自那时起有变动。如果资源未改变,服务器会返回一个304 Not Modified状态码,告诉浏览器...

    Http Etag 技术分享

    Etag http If-None-Match If-Modified-Since Last-Modified 使用Demo 已经可以直接使用

    最新大厂前端面试题-笔试题2.doc

    协商缓存的字段有 Last-Modified / If-Modified-Since 和 Etag / If-None-Match,其中 Etag / If-None-Match 的优先级比 Last-Modified / If-Modified-Since 高。 Last-Modified 字段,它的值是该资源文件在服务器...

    Laravel开发-laravel-etag-middleware

    Last-Modified基于资源的修改时间,客户端同样可以使用If-Modified-Since头进行检查。Etag和Last-Modified相结合,可以提供更为精确的缓存验证机制。 总之,Laravel的Etag中间件是提升Web应用性能的一个实用工具,...

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

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

    浏览器缓存机制

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

    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 ...

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

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

    Etag和Expires.docx

    在后续请求中,客户端会在HttpRequest Header中发送If-Modified-Since报头,包含之前接收到的Last-Modified时间。如果服务器上的文件自上次请求后未被修改,服务器将返回304 Not Modified状态码,客户端则直接从本地...

    浏览器的缓存机制1

    协商缓存通常涉及Last-Modified/If-Modified-Since和Etag/If-None-Match两个字段。Last-Modified是服务器返回资源的最后修改时间,If-Modified-Since是客户端再次请求时携带的Last-Modified值,用来告诉服务器资源的...

    HTTP 请求报头详解

    * Request Header Fields:Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Expect、From、Host、If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since、Max-...

    HTTP cache trainning

    3. **`Last-Modified`与`If-Modified-Since`**: 类似于`ETag`,`Last-Modified`头表示资源的最后修改时间。如果客户端在下次请求时提供`If-Modified-Since`头,服务器会比较这个时间,如果资源未修改,则返回`304 ...

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

    在本文中,我们将深入探讨如何使用Node.js实现HTTP服务器与浏览器之间的内容缓存操作,以...在Node.js中,结合Last-Modified、If-Modified-Since、ETag和If-None-Match等头部信息,可以实现更为精细和可靠的缓存策略。

    关于RemETag的DLL

    4. **协商缓存**:参与HTTP的协商缓存机制,通过If-None-Match和If-Modified-Since头实现高效的数据交换。 5. **性能优化**:通过智能处理ETag,减少带宽消耗,提升用户访问速度。 运维人员需要理解如何配置和利用...

    浏览器HTTP缓存运行机制流程图.zip

    浏览器在请求中添加`If-Modified-Since`头,包含上次资源的`Last-Modified`值。服务器比较这个时间,若资源未修改则返回304,否则返回新的资源和新的`Last-Modified`值。 HTTP缓存不仅涉及上述机制,还有其他策略如...

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

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

    HTTP缓存算法研究与实现.pdf

    服务器再验证机制在文档过期后启用,通过HTTP的条件请求方法如IMS(If-Modified-Since)和实体标签(ETag)来确认文档是否已变更。IMS结合Last-Modified头,对比服务器和客户端的文件最后修改时间,若未变则返回304...

    初探浏览器缓存实现原理-提高性能

    此外,`ETag`(实体标签)也是验证缓存有效性的一个方法,它为每个资源生成一个唯一的标识符,当资源更新时,`ETag`也会变化,服务器通过比较`If-None-Match`头中的`ETag`值来判断是否需要提供新的内容。 在实际应用...

Global site tag (gtag.js) - Google Analytics