`
liupengjava
  • 浏览: 1578 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

缓存协商:Last-Modified 与 ETag

阅读更多

究竟要不要使用浏览器的本地缓存,服务器和浏览器之间有一个沟通的机制,叫做缓存协商,一种是Last-modified,一种就是Etag。

Last-Modified 
浏览器发出一个请求,对于一般的静态内容,服务器端都会通过文件进行stat()系统调用,获取该文件的最后修改时间,然后放入了HTTP的响应头的信息。下一次浏览器再次发送请求的时候,就会在HTTP请求头上面加上一个 (If-Modified-SinceFri, 25 Mar 2011 07:55:33 GMT )这样的标记,服务器再次接受到这个请求的时候,就会将文件的Last-modified时间和HTTP请求的时间的进行对于,如果木有发生变化,返回状态为304 Not Modified的响应。 

 

ETag

另一种协商方法,就是使用Etag,与Last-Modified非常相近,它不是用文件的修改时间进行对比的,而是根据文件的内容进行生成一个标志串,一般都是使用文件的内容的md5值。比如,apache为一个静态的文件响应头上面加入了Etag的标志。下一次浏览器进行请求的时候,HTTP请求就会附加一个If-None-Match的标记,来询问文件是否被修改过,这时候服务器重新计算这个文件的Etag的值,如果相同的话,则直接允许浏览器使用本地缓存。不同的话,则直接返回最新的内容给浏览器。

 

 

两种的对比

有些特定的场合下,一些静态的文件,可能会被频繁的更新, 但是文件内容没有变化,这时候如果使用Last-modified,服务器端始终返回最新的内容给浏览器,而Etag是根据文件内容来的,如果内容没有变化的话,始终会让浏览器使用本地缓存的文件。所以,使使用ETag可以更好的避免一些不必要的服务器相应。

 

 

 

 

分享到:
评论

相关推荐

    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

    标题 "Caching HTTP Headers, Last-Modified 和 ETag" 涉及到的是网络缓存中的两个关键概念,它们在优化网站性能、减少服务器负载以及提高用户体验方面扮演着重要角色。HTTP缓存机制允许浏览器存储先前请求过的资源...

    HTTP缓存头Last-Modified和ETag介绍

    浏览器在验证缓存时,如果两者都存在,会优先使用ETag,只有当ETag验证失败或者服务器不支持ETag时,才会使用Last-Modified。这种方式称为强验证和弱验证,ETag是强验证,Last-Modified是弱验证。 总结来说,HTTP...

    浏览器之HTTP缓存的那些事

    - **Last-Modified/If-Modified-Since**: 用于比较服务器上的文件最后修改时间与客户端缓存副本的最后修改时间。 - **ETag/If-None-Match**: 提供了一个关于资源当前状态的标识符,用于判断资源是否发生变化。 ##...

    Laravel开发-laravel-etag

    在提供的`laravel-etag-master`压缩包中,可能包含了针对Laravel的Etag实现,特别是与RateLimiter(限速器)的结合。RateLimiter 是 Laravel 内置的一个功能,用于限制用户或IP地址的请求频率,防止恶意攻击或滥用...

    Laravel开发-laravel-etag-middleware

    Etag和Last-Modified相结合,可以提供更为精确的缓存验证机制。 总之,Laravel的Etag中间件是提升Web应用性能的一个实用工具,它通过智能缓存策略减少了不必要的数据传输,从而加快了页面加载速度。正确理解和使用...

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

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

    Http页面缓存机制

    浏览器端缓存机制可以分为两类: Cache-Control、Etag、Expires、Last-Modified 和 Vary。这些规则可以控制浏览器缓存的行为,影响浏览器缓存的结果。 Cache-Control 是一种控制浏览器缓存的规则,它可以控制...

    Laravel开发-laravel-weak-etag-middleware

    "laravel-weak-etag-middleware"是专为Laravel设计的一个自定义中间件,其主要目的是向HTTP响应头添加弱ETag(弱实体标签)。...在适当的情况下,结合Last-Modified等其他缓存策略,可以达到更优的性能效果。

    UIWebView离线缓存

    离线缓存机制主要依赖于HTTP协议中的缓存策略,包括Last-Modified和ETag等头信息。当UIWebView接收到一个网页请求时,它会检查本地是否有该页面的缓存副本。如果有,且服务器返回的缓存策略允许使用缓存,则...

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

    浏览器会发送`If-Modified-Since`头,包含上次获取资源时的`Last-Modified`时间,服务器比较这个时间与当前资源的修改时间,如果未修改,返回304状态码,否则返回完整资源。 HTTP头中的关键字段包括: - `Pragma: ...

    浏览器的缓存机制1

    协商缓存是浏览器携带先前的缓存标识(如Last-Modified或Etag)向服务器询问资源是否已更新,服务器根据这些标识判断资源是否改变,若无变化则返回304状态码,浏览器使用本地缓存;若有变化,服务器返回200状态码及...

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

    这通常涉及两个响应头字段:`ETag`和`Last-Modified`。 - `ETag`(实体标签):服务器为每个资源生成一个唯一标识,每次资源更新,`ETag`也会改变。浏览器在请求中带上`If-None-Match`头,包含上次获取的`ETag`。...

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

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

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

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

    如何解决缓存问题及如何设置缓存

    当浏览器请求Web页面时,如果Last-Modified头与服务器端的Last-Modified头相同,那么浏览器就不会重新加载Web页面。 4. 使用缓存服务器:缓存服务器可以缓存Web页面的内容,以便快速响应浏览器的请求。 如何设置...

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

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

    Etag和Expires.docx

    或者,可以结合使用Last-Modified和Etag,以提高缓存的有效性和准确性。 总结来说,Etag和Expires是HTTP缓存策略的重要组成部分,它们协同工作,确保客户端能够高效、准确地缓存服务器资源。在实际应用中,开发者...

Global site tag (gtag.js) - Google Analytics