HTTP/1.1中有一个Etag,用来判断请求的文件是否被修改。 为什么要使用Etag呢?...但是HTTP/1.1 标准并没有规定Etag的内容是什么或者说要怎么实现,唯一规定的是Etag需要放在""内。...(例如"2e681a-6-5d044840")(假设服务器支持Etag生成和已经开启了Etag)....可能为: Etag "6" 总之,设置了几个段,Etag值就有几个段。...(Weak Etag),这个Etag仅仅基于MTime来生成,因此MTime只能精确到s,所以1s内生成的Etag总是一样,这样就避免了使用强Etag造成的 1s内频繁的刷新Cache的情况。
http://mpvideo.qpic.cn/0bf2reassaabjqamrtglqzpvdcodfgeqckia.f10002.mp4?dis_k=cd3...
(之前遇到过ETag在服务器集群中同步的问题,原因是在服务端生成ETag的方式不妥,最终解决方案就是针对请求文件的内容进行hash并base64编码,这样在服务端同步的前提下,请求任意服务器都会返回相同的...在这里的实现中,有可能会存在浏览器对动态文件‘eTag.js’的缓存,为了避免‘eTag.js’的准确和实时,因此需要设置‘cache-control’头部。...router.get('/_eTag_.js',function * (next){ var ctx = this; var etag = ctx.header['if-none-match']...etag) { etag = new Date().getTime() + '__etag'; } // console.log(session) if(session[etag...]) { cache = session[etag]; }else { cache = { etag: etag }; } cache = JSON.stringify
具体作用这样 接受一个String 或 Buffer,返回一个固定的String ?...可见返回至完全改变了 这个特性可以用来判断两次信息传输是否完整一致 ETag 例子: 例如我们请求一个js文件。 设置一个ETag响应头 ?...这样做的作用是:如果请求和响应的MD5一样,说明不需要重新下载这个js文件。这时我们修改代码: ?...HTTP 304 没有响应体,因为不需要下载响应内容,直接用缓存就行了 ETag与 Cache-Control的区别 假设我们请求两个文件,CSS文件使用Cache-Control缓存,js文件使用ETag...所以: 由于CSS的请求是用缓存(Cache-Control)的,所以直接不发请求 而js用的ETag,有请求也有响应,只不过如果MD5一样,那么就不下载响应体
300M,然而你不知道你下载的是不是和它的 300M 一样这时就需要有个 MD5,如果你们两个的 MD5 值一样,那么说明你下载的 300M=== 它的 300M文件差异越小,MD5 的差异越大了解 ETag...用 cache-Control 是不请求,ETage 是直接不下载,但还是有请求,但是响应体是空的打开一个网页,初次打开会有一个 ETag,以后再打开它的时候请求里有一个 if-none-match 响应头
下面开始介绍 Etag: Etag在HTTP1.1中有介绍,主要的作用就是在(css file, image, javascript file)文件后面添加一个唯一的参数(相当于查询参数字符串...),Etag有服务器端生成,并且随着文件的改变而改变,这样浏览器端就会只重新请求获取 Etag发生变化的文件,减少浏览器端数据的流量,加快浏览器的反应速度,重要的是减轻服务器端的压力,所以服务器端Etag...ETag(实体标签)应答头的文件的属性(ETag的值用于进行缓冲管理以节约网络带宽)。...头 在大型多WEB集群时,使用ETag时有问题,所以有人建议使用WEB集群时不要使用ETag,其实很好解决, 因为多服务器时,INode不一样,所以不同的服务器生成的ETag不一样,所以用户有可能重复下载...(这时ETag就会不准),明白了上面的原理和设置后,解决方法也很容易,让ETag后面二个参数,MTime和Size就好了.只要ETag的计算没有INode参与计算,就会很准了.
ETag全称EntityTags,HTTP协议规格说明中定义“ETag”为“被请求变量的实体值”。我们也可以把ETag理解为是一个客户端与服务器关联的记号。...在我们与技术沟通配置ETag时,需要通过此种方式进行验证。第一次访问200状态码,有ETag的一行文本,再次访问该页面时,状态码为304,ETag的值不变。至此,我们就可以确定ETag配置成功。...以覆盖默认的Innode MTime Size的ETag,因为默认的ETag使用到的Innode会导致相同的文件在分布式服务器上产生的ETag不同。...ETag ?...三、IIS IIS7是默认开启ETag的,如果没有ETag,请按以下步骤设置。
以下内容主要考虑Apache+squid 环境 ETag Header是文件修改时间、文件大小和inode号生成的校验(checksum),在多台服务器的负载均衡环境下会因部署内容的inode节点差异造成...ETag 的不同,在多台WEB前端做负载均衡的情况下,会因为请求同一个数据但不同机器的 ETag 而影响了响应....具体表现为用户在第一次请求某一内容时下载而再次时浏览器会发现ETag不同而再次请求下载.。...(再次刷新时查看是否响应码为:304) 对于Apache 可以使用 FileEtag 选项配置 Apache 的默认ETag的值总是由文件的索引节点(Inode)、大小(Size)、最后修改时间(MTime...信息 Date Thu, 07 Aug 2008 07:27:57 GMT Server Apache Last-Modified Fri, 27 Jun 2008 07:18:52 GMT Etag
rewrite> ETag...= clientToken) { _response.AddHeader("ETag", token); _filter.Write(data,...= clientToken) { _response.AddHeader("ETag", token); _filter.Write(data, 0, count...Content-Length", "0"); } } } //[OutputCache(Duration = 360, VaryByParam = "none")] [ETag
什么是ETag? 实体标签(EntityTag)是唯一标识了一个组件的一个特定版本的字符串,是web服务器用于确认缓存组件的有效性的一种机制,通常可以使用组件的某些属性来构造它。...为什么要引入ETag? ETag主要是为了解决Last-Modified无法解决的一些问题: 1....ETag带来的问题 ETag的问题在于通常使用某些属性来构造它,有些属性对于特定的部署了网站的服务器来说是唯一的。...如果使用Last-Modified不会出现任何问题,可以直接移除ETag,google的搜索首页则没有使用ETag。 2....确定要使用ETag,在配置ETag的值的时候,移除可能影响到组件集群服务器验证的属性,例如只包含组件大小和时间戳。
Content-Length: 66529 Content-Type: image/jpeg Last-Modified: Tue, 19 Aug 2014 12:23:54 GMT Accept-Ranges: bytes ETag...复制代码 代码如下: HTTP/1.1 304 Not Modified Last-Modified: Tue, 19 Aug 2014 12:23:54 GMT Accept-Ranges: bytes ETag...Last-Modified和ETag都是用于HTTP缓存,浏览器在第二次请求时会将其传回给服务器用于判断资源是否有变化。...ETag是HTTP/1.1标准开始引入的,它是对Last-Modified的补充,主要原因有以下几点: ·一些周期性修改的文件,修改时间变了但内容没变,此时不希望重新GET; ·一些文件修改非常频繁,比如...1秒内修改了多次,Last-Modified只能精确到秒; ·一些服务器不能得到文件修改的精确时间; 说明:HTTP/1.1标准没有规定Etag的内容是什么或者说要怎么实现,唯一规定的是Etag需要放在引号内
有一种将 ETag标识符用于 Web 资源的策略。 简而言之,ETag 标识符是一个值,通常是一个散列,代表特定 Web 资源的版本。...etag 标头代表资源的版本,并随将来的请求一起发送。如果服务器回复说两次请求之间的 etag 没有改变,则响应将会带有 304 代码,从而将使用缓存的资源。...如果 etag 不同,则使用新的 etag 哈希产生 200 响应。 与压缩的缓存资源进行交互 如果查看浏览器的网络检查器,您可能会注意到资源的 etag 哈希值附加了 -df 值。...为了使 cURL 超越此限制,以下请求将起作用: 1$ curl --compressed -I -H 'If-None-Match: "018b8b0ecb632aab770af328f043b119...从理论上讲,CDN 会维护给定资源的版本信息,因此将能够验证 etag 值的新鲜度。由浏览器决定 etag 是否陈旧。
3.使用 curl来验证ETag功能 4.Spring对ETag的支持 5.测试ETag 6.ETag的其它用武之地 7....2.REST和 ETag 来自Spring官方文档中对ETag特性的描述: ETag(实体标签)是由符合HTTP/1.1的Web服务器返回的HTTP响应头,用于检查给定URL的返回值是否发生变化。...ETag常用于这两个场景——缓存和条件请求。ETag的值可以是根据响应体计算出来的hash值。因为可能使用Hash函数,所以即使响应体出现很小的改动也会极大地改变输出,也就是ETag值会发生变化。...的作用了,你可以在更多场合使用,并且可以节省带宽。...5.测试ETag 那就开始吧——在检索一个资源时,我们需要验证返回的响应体将包含一个“ETag”头。
5、Etag和Expires 如果服务器端同时设置了Etag和Expires时,Etag原理同样,即与Last-Modified/Etag对应的HttpRequest Header:If-Modified-Since...Etag之后,服务器才能返回304. 6、Last-Modified和Etag Last-Modified 和ETags请求的http报头一起使用,服务器首先产生 Last-Modified/Etag标记...也要先查看是否支持了mod_expire模块, 下面的设置是让URI中所有images目录下的文件1小时后过期; expire.url = ( “/images/” => “access 1 hours” ) 下面是让作用于...expires 指令可以控制 HTTP 应答中的“ Expires ”和“ Cache-Control ”的头标(起到控制页面缓存的作用)。...inode作为Etag etag.use-mtime: 是否使用文件修改时间作为Etag etag.use-size: 是否使用文件大小作为Etag static-file.etags: 是否启用Etag
什么是”Etag”? HTTP 协议规格说明定义ETag为“被请求变量的实体值” (参见 —— 章节 14.19)。 另一种说法是,ETag是一个可以与Web资源关联的记号(token)。...本人测试Etag主要在断点下载时比较有用。 Last-Modified和Etags如何帮助提高性能?...服务器返回页面A,并在给A加上一个Last-Modified/ETag。 客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。...客户再次请求页面A,并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器。...服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。
ETag / If-None-Match HTTP 协议规格说明定义 ETag 为“被请求变量的实体值”。...服务器单独负责判断记号是什么及其含义,并在 HTTP 响应头中将其传送到客户端,以下是服务器端返回的格式: ETag: "d41d8cd98f00b204e9800998ecf8427e" 客户端的查询更新格式是这样的...: If-None-Match: W/"d41d8cd98f00b204e9800998ecf8427e" 如果ETag没改变,则返回状态304,内容为空,这也和Last-Modified一样。...因为服务器首先产生 Last-Modified/Etag 标记,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其缓存是否过期。
ETag使用得当,是可以减少服务器带宽压力的。 什么是ETag?...Etag是 Entity tag的缩写,可以理解为“被请求变量的实体值”,Etag是服务端的一个资源的标识,在 HTTP 响应头中将其传送到客户端。...Etag实际例子讲解 我们可以通过Etag来利用浏览器的缓存,降低我们服务器的带宽压力。这是可以提升服务端的性能的(数据传输上)。七牛云的文件存储,就用到了Etag的属性。...总结 本文只是对Etag做一个概念性的讲解,并且结合了七牛云的对象存储的例子,分析了Etag缓存的流程。...关于Etag,还有很多东西没有深入讲解,比如Etag是怎么计算的,Last-Modified/If-Modified-Since是什么,以及Etag实战等,这些在后续再做深入的讲解吧!
2) 什么是”Etag”? HTTP 协议规格说明定义ETag为“被请求变量的实体值” 。 另一种说法是,ETag是一个可以与Web资源关联的记号(token)。...2,服务器返回页面A,并在给A加上一个Last-Modified/ETag。 3,客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。...4,客户再次请求页面A,并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器。...5,服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。...正确使用Etag和Expires标识处理,可以使得页面更加有效被Cache。
作用域与作用域链 通常来说,一段程序代码中所用到的名字并不总是有效或可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域scope。...如果一个变量或者其他表达式不在当前的作用域,则将无法使用。作用域也可以根据代码层次分层,以便子作用域可以访问父作用域,通常是指沿着链式的作用域链查找,而不能从父作用域引用子作用域中的变量和引用。...作用域 JavaScript作用域为静态作用域static scope,也可以称为词法作用域lexical scope,其主要特征在于,函数作用域中遇到既不是参数也不是函数内部定义的局部变量时,去函数定义时上下文中查...,也就是声明时即规定作用域,而假如是动态作用域的话在此处会打印2。...作用域、localContext作用域、Global作用域,总结来说,当需要使用函数或者变量时,如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这样一个查找过程形成的链条就叫做作用域链
作用域、作用域链也是面试中出镜率很高的问题之一java作用域java作用域,同时也是中最重要的基础概念之一。 ...今天我们将通过最简单实际的代码来展示函数作用域和全局作用域,在下篇文章中,我们将介绍块级作用域和暂时性死区。 ...作用域基本知识 简单来说,作用域就是用来规定变量的作用范围的,在任何语言当中都会有作用域的概念,在ES6以前,只有函数作用域和全局作用域,ES6之后又增加块级作用域。 ...函数作用域和全局作用域 函数作用域非常简单,比如,执行下面的foo函数,变量a在函数foo的作用域内,所以在函数内可以正常的访问该变量,输出bar function foo()...,就会就近首先在函数内查找变量是否声明赋值,如果函数内无法找到该变量,就跳出当前函数作用域,到上层作用域中进行查找,这里的上层作用域可能是也是一个函数作用域,也可能是全局作用域。
领取专属 10元无门槛券
手把手带您无忧上云