首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SpringMVC源码解析之Last-Modified缓存机制

Spring MVC 支持HTTP协议的 Last-Modified 缓存机制。 支持上次修改的HTTP请求,以方便内容缓存。...在客户端地一次输入URL时,服务器端会返回内容和状态码200, 表示请求成功,同时会添加一个“Last-Modified”属性,表示该请求资源的最后修改时间 客户端第二次请求此URL时,客户端会向服务器发送请求头...返回值将被发送到HTTP客户端作为Last-Modified头,并与如果-Modified-Since的标头,该客户端发回。 内容将只得到再生,如果出现了修改 ?...如果 notModified=true,则设置response响应状态码304或412 如果是GET 或 HEAD 请求则添加响应头“Last-Modified” validateIfModifiedSince...服务器响应头中会包含“Last-Modified”信息,访问资源最后修改的日期。

42010

HTTP缓存头Last-Modified和ETag介绍

Accept-Language: zh-CN,zh;q=0.8 响应: 复制代码 代码如下: HTTP/1.1 200 OK Content-Length: 66529 Content-Type: image/jpeg Last-Modified...Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zh;q=0.8 响应: 复制代码 代码如下: HTTP/1.1 304 Not Modified Last-Modified...Last-Modified和ETag都是用于HTTP缓存,浏览器在第二次请求时会将其传回给服务器用于判断资源是否有变化。...ETag是HTTP/1.1标准开始引入的,它是对Last-Modified的补充,主要原因有以下几点: ·一些周期性修改的文件,修改时间变了但内容没变,此时不希望重新GET; ·一些文件修改非常频繁,比如...1秒内修改了多次,Last-Modified只能精确到秒; ·一些服务器不能得到文件修改的精确时间; 说明:HTTP/1.1标准没有规定Etag的内容是什么或者说要怎么实现,唯一规定的是Etag需要放在引号内

34430
您找到你想要的搜索结果了吗?
是的
没有找到

使用 ETag 和 Last-Modified 报头减轻服务器压力(转)

基础知识 什么是”Last-Modified”?...在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样: Last-Modified...Last-Modified和Etags如何帮助提高性能? 聪明的开发者会把Last-Modified 和ETags请求的http报头一起使用,这样可利用客户端(例如浏览器)的缓存。...服务器返回页面A,并在给A加上一个Last-Modified/ETag。 客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。...客户再次请求页面A,并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器。

40210

浏览器缓存 Last-Modified Etag Expires Cache-Control 详解

条件请求 Last-Modified / If-Modified-Since 在浏览器第一次请求某一个 URL 时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个 Last-Modified...的属性标记此文件在服务期端最后被修改的时间,格式类似这样: Last-Modified: Mon, 30 Nov 2015 23:21:37 GMT 浏览器第二次请求此 URL 时,根据 HTTP...d41d8cd98f00b204e9800998ecf8427e" 客户端的查询更新格式是这样的: If-None-Match: W/"d41d8cd98f00b204e9800998ecf8427e" 如果ETag没改变,则返回状态304,内容为空,这也和Last-Modified...如何使用 Last-Modified 和 Etags 如何帮助提高性能? 开发者会把 Last-Modified 和 ETags 请求的 HTTP 报头一起使用,这样可利用客户端(例如浏览器)的缓存。...因为服务器首先产生 Last-Modified/Etag 标记,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其缓存是否过期。

86830

HTTP缓存机制的Etag、Last-Modified、If-None-Match和If-Modified-Since、Expires和Cache-Control笔记

Etag和Last-Modified区别: Last-Modified包含了上次更改文档的日期。事实证明,在尝试确定文档是否已更改时,Last-Modified日期并不很可靠。...Last-Modified与Etag类似。不过Last-Modified表示响应资源在服务器最后修改时间而已。...如果1s内文件被修改了,但是Last-Modified没变,此时不能根据Last-Modified判断文件是否被修改过。   ...设想这样一种情景,资源A已经被请求过了,现在资源A又自动重新生成,仅仅只是最后修改时间Last-Modified变了,其余的内容均无变化,但是Last-Modified和之前不一样并不能说明资源A已经修改了...(Etag显然比Last-Modified值准确)。

1K20

【前端 · 面试 】HTTP 总结(九)—— HTTP 协商缓存

Last-Modified 当浏览器第一次访问一个资源的时候,服务器会在 Response 、Header 中返回一个 Last-Modified,代表这个资源最后的修改时间。...因此启用 Etag 需要我们审时度势: Etag 并不能替代 Last-Modified,它只能作为 Last-Modified 的补充和强化存在。...Etag 在感知文件变化上比 Last-Modified 更加准确,优先级也更高。 当 Etag 和 Last-Modified 同时存在时,以 Etag 为准。...两种属性比较 在精确度上,Etag 要优于 Last-ModifiedLast-Modified 的时间单位是秒,如果某个文件在 1 秒内改变了多次,那么他们的 Last-Modified 其实并没有体现出来修改...Etag 是 Last-Modified 的补充和完善,并不能完全替代 Last-Modified。 Etag 的优先级高于 Last-Modified

33010

Js篇-面试题6-聊一下强缓存与协商缓存

:xxx Server: 服务器 如果没有命中强缓存,浏览器会发送请求到服务器,请求会携带第一次请求返回的有关缓存的header字段信息(Last-Modified/If-Modified-Since...或 Etag),则后续请求则会带上对应的请求字段(If-Modified-Since 或 If-Node-Match),若响应头没有Last-Modified或Etag字段,则请求头也不会由对应的字段...加上Last-Modified的header,这个header表示这个资源在服务器上的最后修改时间 浏览器再次跟服务器请求这个资源时,在request的header上加上If-Modified-Since.../If-None-Match 这两个值是由服务器生成的每个资源的唯一标识符,只要资源有变化,这个值就会改变,其判断过程与Last-Modified/If-Modified-Since类似,与Last-Modified...又为何有ETag 使用Last-Modified已经足以让浏览器知道本地的缓存副本是否足够新,那为什么还需要Etag呢,HTTP1.1 中ETag的出现主要时为了解决几个Last-Modified比较难解决的问题

1.5K10

http请求头中缓存的实现

服务器通过响应头Last-Modified告知浏览器,资源最后被修改的时间: Last-Modified: Thu, 20 Jun 2019 15:58:05 GMT 当再次请求该资源时,浏览器需要再次向服务器确认...综上总结为: 请求头last-modified的日期与响应头的last-modified一致 请求头if-none-match的hash与响应头的etag一致 这两种情况会返回Status Code:...其实在上面说到的Last-Modified对比最后修改时间与Expires一样是有缺陷的,如果,资源的变化的时间间隔小于秒级,比如说是毫秒级的,或者说资源直接是动态生成的,那根据Last-Modified...依照就近原则,先找本地缓存,没有再向服务器发请求,所以Expires>Last-Modified,Cache-Control>ETag, 如果浏览器只支持http1.0,那么浏览器只会携带Last-Modified...发送给后台, 如果服务器只支持http1.0,那么服务器会以Last-Modified为标准。

1.8K30

强制缓存和协商缓存的区别

因为Last-Modified的一些缺陷,比如只能标识到时间秒等,所以出现了Etag。当然也可以自定义tag。...这个时间点一般是服务端Last-Modified返回的时间点。   ...如图: 总结: 客户端请求服务端时,服务端在响应头添加 {Last-Modified:最新的时间1,Etag:最新的字符串标识符1},客户端保存服务端的Last-Modified的值和Etag的值,...当服务器返回304 Not Modified的响应时,response header中不会再添加Last-Modified的header,因为既然资源没有变化,那么Last-Modified也就不会改变...,只要资源有变化就这个值就会改变;其判断过程与Last-Modified/If-Modified-Since类似,与Last-Modified不一样的是,当服务器返回304 Not Modified的响应时

86120

HTTP缓存——协商缓存(缓存验证)

也就是说,如果命中协商缓存,服务端响应请求时,只会返回一个304状态码、并没有实际上的文件内容,因此在响应体体积上的节省是协商缓存的优化点 HTTP/1.0 Last-ModifiedLast-Modified...Last-Modified是一种缓存弱校验器。说它弱是因为它只能精确到一秒。...上图中,服务端拿着他的值和服务端本地被请求资源的Last-Modified进行比较: 如果Last-Modified <= If-Modified-Since,说明资源一致,命中协商缓存,返回304状态码...Last-Modified和Etag的优缺点分析如下: Last-Modified优点 不存在版本问题,每次请求都会去服务器进行校验。...(注意:实际HTTP1.1的请求中,两组字段同时包含在请求及响应头中,我这里为了加深组CP的印象,分开阐述) 1、Last-Modified组整体流程如下: 服务器通过 Last-Modified 字段告知客户端

2.2K10

使用ETag和Expires调优web服务器性能

、Expires和Etag是标记页面缓存标识 一、Last-Modified、Expires和Etag相关工作原理 1、Last-Modified 在浏览器第一次请求某一个URL时,服务器端的返回状态会是...200,内容是你请求的资源,同时有一个Last-Modified的属性标记(Http Reponse Header)此文件在服务期端最后被修改的时间,格式类似这样: Last-Modified: Tue...4、Last-Modified和Expires Last-Modified标识能够节省一点带宽,但是还是逃不掉发一个HTTP请求出去,而且要和Expires一起用。...Etag之后,服务器才能返回304. 6、Last-Modified和Etag Last-Modified 和ETags请求的http报头一起使用,服务器首先产生 Last-Modified/Etag标记...服务器返回页面A,并在给A加上一个Last-Modified/ETag。 客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。

85420

看了这篇,关于浏览器缓存你还有哪些疑问?

5、Last-Modified和Expires Last-Modified标识能够节省一点带宽,但是还是逃不掉发一个HTTP请求出去,而且要和Expires一起用。...之后,服务器才能返回304. 7、Last-Modified和Etag 分布式系统里多台机器间文件的last-modified必须保持一致,以免负载均衡到不同机器导致比对失败 分布式系统尽量关闭掉Etag...(每台机器生成的etag都会不一样) Last-Modified和ETags请求的http报头一起使用,服务器首先产生Last-Modified/Etag标记,服务器可在稍后使用它来判断页面是否已经被修改...服务器返回页面A,并在给A加上一个Last-Modified/ETag。 客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。...WebServer发送完Last-Modified/Etag头给客户端后,客户端会缓存这些头; 客户端再次发起相同页面的请求时,将分别发送与Last-Modified/Etag对应的HttpRequestHeader

62800

轻松理解HTTP缓存策略

你可以理解为,老板给日期还取了一个名字,叫Last-Modified,所以光碟上完整文字是Last-Modified:2000年12月1日,而我去问的时候就这么问:“Do you have any updates...Last-Modified & If-Modified-Since Last-Modified和If-Modified-Since也是配套使用的,类似于ETag和If-None-Match的关系。...Last-Modified是放到response的header里面的,可能长这样: Last-Modified: Wed, 21 Oct 2000 07:28:00 GMT 而客户端浏览器在使用时,应该将配套的...答案是ETag,ETag的优先级比Last-Modified高。...因为Last-Modified在设计上有个问题,那就是Last-Modified的精度只能到秒,如果一个资源频繁修改,在同一秒进行多次修改,你从Last-Modified上是看不出来区别的。

49740

浏览器 HTTP 协议缓存机制详解

Last-Modified/If-Modified-Since:Last-Modified/If-Modified-Since要配合Cache-Control使用。...Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。...既生Last-Modified何生Etag?你可能会觉得使用Last-Modified已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要Etag(实体标识)呢?...HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题: Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间...Last-Modified与ETag一起使用时,服务器会优先验证ETag。

1.3K50

通过 Node.js 小示例学习浏览器缓存策略

协商缓存的实现也是基于两点 Last-Modified、ETag 这个需要在 HTTP Headers 中设置。...Last-Modified/If-Modified-Since Last-Modified 是在服务端设置进行响应,If-Modified-Since 是在浏览器端根据服务端上次在 Response Headers...,这在设置了 Last-Modified 响应头且没有设置 Cache-Control: max-age/s-maxage 或 Expires 时会触发,它的一个缓存时间是用 Date - Last-Modified...与 Etag 对比 精确度:Last-Modified 以时间(秒)为单位,如果出现 1 秒内文件多次修改,在 Last-Modified 缓存策略下也不会失效,Etag 是对内容进行 Hash 比较...性能消耗:Etag 需要读取文件做 Hash 计算,相比 Last-Modified 性能上是有损耗的。 优先级:如果 Last-Modified/Etag 同时设置,Etag 的优先级会更高些。

1.2K30
领券