要公开资源的修改日期,您应该设置Last-Modified标头。Spring的ResponseEntity构建器有一个名为lastModified()的特殊方法,它可以帮助您以正确的格式分配值。...客户端根据Last-Modified标头的值设置其值,该标头是与此特定资源的先前响应一起发送的。...然后,我们将日期与If-Modified-Since标头的值进行比较,并在正匹配上返回一个空。否则,服务器发送具有Last-Modified标头的适当值的完整响应主体。...Last-Modified vs ETag 正如我已经提到的,Last-Modified标头不太精确,因为它具有一秒的精度。为了获得更高的精度,请选择ETag。...我们还讨论了服务器端验证并比较了Last-Modified和ETag标头。最后,您了解了如何在Spring应用程序中设置全局ETag过滤器。
此模块可用于向响应添加任意任意标头,但其主要作用是正确设置缓存标头。在本教程中,我们将了解如何使用Nginx的头模块来实现浏览器缓存。...使用Web浏览器时,如果浏览器想要再次请求相同的文件(例如,刷新页面时),ETag则会将值存储并发送回带有If-None-Match请求标头的服务器。 我们可以使用以下命令在命令行上模拟它。...使用ETag命令的问题是浏览器总是向服务器发送一个请求,询问它是否可以重用其缓存文件。即使服务器以304响应而不是再次发送文件,仍然需要时间来发出请求并接收响应。...第3步 - 配置缓存控制和过期标头 除了ETag文件验证头之外,还有两个缓存控制响应头:Cache-Control和Expires。...如果未设置标头,浏览器将始终从服务器请求文件,期望200 OK或304 Not Modified响应。 我们可以使用头模块来设置这些HTTP头。
此模块可用于向响应添加任意任意标头,但其主要作用是正确设置缓存标头。在本教程中,我们将了解如何使用Nginx的头模块来实现浏览器缓存。...使用Web浏览器时,如果浏览器想要再次请求相同的文件(例如,刷新页面时),则会将ETag值存储并发送回带有If-None-Match请求标头的服务器。 我们可以使用以下命令在命令行上模拟它。...ETag的问题是浏览器总是向服务器发送一个请求,询问它是否可以重用其缓存文件。即使服务器以304响应而不是再次发送文件,仍然需要时间来发出请求并接收响应。...第3步 - 配置缓存控制和过期标头 除了ETag文件验证头之外,还有两个缓存控制响应头:Cache-Control和Expires。...如果未设置标头,浏览器将始终从服务器请求文件,期望200 OK或304 Not Modified响应。 我们可以使用头模块来设置这些HTTP头。
缓存标头:HTTP 协议提供了一些特定的缓存标头,如 ETag(实体标签)和 Last-Modified(最后修改时间),用于识别和比较资源的不同版本。...客户端在后续请求中可以通过发送 If-None-Match 标头将 ETag 发送回服务器,以检查资源是否发生了变化。...Last-Modified(最后修改时间):服务器可以将资源的最后修改时间发送给客户端。...客户端在后续请求中可以通过发送 If-Modified-Since 标头将最后修改时间发送回服务器,以检查资源是否发生了变化。...服务器根据 ETag 或 Last-Modified 标头来确定资源是否发生了变化,并返回相应的状态码(如 304 Not Modified),以指示客户端使用缓存副本。
这样就能解释上面一个问题,当响应头既有Last-Modified又有Etag,Etag是多余的吗?...这个和HTTP / 1.0规范中定义的Pragma:no-cache头字段具有相同的目的。但是,它仅为请求标头定义。它没有指定它在响应头中的含义。...If-Modified-Since: If-Modified-Since 和 Last-Modified 一样都是用于记录页面最后修改时间的 HTTP 头信息,只是 Last-Modified 是由服务器往客户端发送的...HTTP 响应头字段,而 If-Modified-Since 则是由客户端往服务器发送的请求头字段。...If-Modified-Since如果提供的日期以来尚未更改,服务器不会发送文档的实际内容。 如果文档的ETag仍然与If-None-Match标头的值匹配,则服务器将不发送实际文档。
通常 cache-control 被认为是一种比 expires(到期) 更现代,更灵活的方法,但是两个标头可以同时使用。 Q: 如何进行缓存?...缓存校验就是用来解决这些问题的,在http 1.1 中我们主要关注下 Last-Modified 和 etag 这两个字段。...Last-Modified 原理说明: 1.服务端在返回资源时,会将该资源的最后更改时间通过Last-Modified字段返回给客户端。...Tips : expires 标头只是设置内容应在将来的时间。此后对内容的请求必须返回到原始服务器。使用更新且更灵活的高速缓存控制标头expires标头通常用作备用。...缓存校验有:Expires,Last-Modified,etag。
在大多数情况下,你可以通过 Cache-Control 标头和你自己的配置文件或仪表板来控制缓存的行为。...因此,下面的请求显示客户端发送带有 If-Modified-Since 请求标头的请求,以询问服务器自指定时间以来是否有任何的改变。...doctype html> … 如果该响应是陈旧的,则客户端获取缓存响应的 ETag 响应标头的值,并将其放入 If-None-Match 请求标头中,以询问服务器资源是否已被修改: GET /index.html...备注: 在评估如何使用 ETag 和 Last-Modified 时,请考虑以下几点:在缓存重新验证期间,如果 ETag 和 Last-Modified 都存在,则 ETag 优先。...此外,添加 Last-Modified 和 ETag 将允许客户端发送条件请求,如果 HTML 没有更新,则可以返回 304 Not Modified: 200 OK HTTP/1.1 Content-Type
本人测试Etag主要在断点下载时比较有用。 Last-Modified和Etags如何帮助提高性能?...服务器返回页面A,并在给A加上一个Last-Modified/ETag。 客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。...HTTP 标头。...response.Cache.SetETagFromFileDependencies(); //基于处理程序文件依赖项的时间戳设置 Last-Modified HTTP 标头。...,如前所述,如果能正确合理的利用各种不同的缓存,他们会给你带来很多的好处.我 希望本文已为你当下或将来基于Web的项目提供了精神食粮,并正确地在底层利用Last- Modified和ETag响应头去优化你的项目
最后,如果max-age 和 expires 都不存在,就去寻找 Last-Modified 标头,如果存在此标头,则高速缓存的有效性等于 Date 标头的值减去 Last-modified 标头的值除以...Last-Modified响应标头可以用作弱验证器,因为它只有1秒可以分辨的时间。...如果响应中存在 Last-Modified标头,则客户端可以发出 If-Modified-Since请求标头来验证缓存资源。...要使用 Last-Modified 很难实现强验证,通常,这是通过使用带有资源的 MD5 哈希值的 Etag 来完成的。...客户端第一次发送请求没有,缓存为空并且没有条件请求,服务器在收到客户端请求后,设置验证器 Last-Modified 和 Etag 标签,并把这两个标签随着响应一起发送回客户端。
Cache-Control 是通用标头的指令,它能够管理如何对 HTTP 的请求或者响应使用缓存。...例如下面这种写法 Server: Apache/2.4.1 (Unix) Vary Vary HTTP 响应标头确定如何匹配请求标头,以决定是否可以使用缓存的响应,而不是从原始服务器请求一个新的响应。...如果服务器响应405 Method Not Allowed状态码以指示可以使用哪些请求方法,则必须发送此标头。...Last-Modified 实体字段 Last-Modified 指明资源的最后修改时间,它用作验证器来确定接收或存储的资源是否相同。...它的一般表示如下 Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT 总结 本篇文章主要介绍了 HTTP 四种标头的基本概念,但是并没有涵盖全部,毕竟 HTTP
最后,如果max-age 和 expires 都不存在,就去寻找 Last-Modified 标头,如果存在此标头,则高速缓存的有效性等于 Date 标头的值减去 Last-modified 标头的值除以...Last-Modified响应标头可以用作弱验证器,因为它只有1秒可以分辨的时间。...如果响应中存在 Last-Modified标头,则客户端可以发出 If-Modified-Since请求标头来验证缓存资源。...要使用 Last-Modified 很难实现强验证,通常,这是通过使用带有资源的 MD5 哈希值的 Etag 来完成的。...如下图所示 客户端第一次发送请求没有,缓存为空并且没有条件请求,服务器在收到客户端请求后,设置验证器 Last-Modified 和 Etag 标签,并把这两个标签随着响应一起发送回客户端。
HTTP 通用标头主要用于传达有关消息本身的信息,而不是它所携带的内容。它们提供一般信息并控制如何处理和处理消息。...Cache-Control 是通用标头的指令,它能够管理如何对 HTTP 的请求或者响应使用缓存。...例如下面这种写法 Server: Apache/2.4.1 (Unix) Vary Vary HTTP 响应标头确定如何匹配请求标头,以决定是否可以使用缓存的响应,而不是从原始服务器请求一个新的响应。...如果服务器响应405 Method Not Allowed状态码以指示可以使用哪些请求方法,则必须发送此标头。...Last-Modified 实体字段 Last-Modified 指明资源的最后修改时间,它用作验证器来确定接收或存储的资源是否相同。
,资源是否过期,其中的凭证就是请求头If-Modified-Since字段,值为上次请求中响应头Last-Modified字段的值: If-Modified-Since: Thu, 20 Jun 2019...综上总结为: 请求头last-modified的日期与响应头的last-modified一致 请求头if-none-match的hash与响应头的etag一致 这两种情况会返回Status Code:...当然,计算Etag值会消耗服务器性能。 Cache-Control+Last-Modified+ETag 的优先级会如何?...发送给后台, 如果服务器只支持http1.0,那么服务器会以Last-Modified为标准。...如果浏览器支持http1.1,那么浏览器会携带Cache-Control+Last-Modified+ETag发送给后台, 如果服务器支持http1.1,那么服务器会以Cache-Control+ETag
基于响应中的Last-Modified头,浏览器可以知道组件最后的修改时间。它会使用If-Modified-Since头将最后修改时间发送给服务器。...二者同时存在时,HTTP规定max-age指令将重写Expires头。 修订文件名 如果我们将组件配置可以在浏览器端进行缓存,当这些组件改变时用户如何获得更新呢?...Last-Modified响应头来返回组件最新修改日期。...头将最新修改日期传回到原始服务器以进行比较。...例如,如果实体依据User-Agent或Accept-Language头而改变,实体的状态可以反映在ETag中。浏览器会使用If-None-Match头将ETag传回原始服务器以进行比较。
对于每一个Django从视图发回的页面(响应),都会提供两个HTTP协议头:ETag和Last-Modified。这些协议头在HTTP响应中是可选的。...协议头,包含之前发送的ETag。...condition装饰器的签名为i: condition(etag_func=None, last_modified_func=None) 计算ETag的最后修改时间的两个函数,会以相同的顺序传入request...他们的签名是: etag(etag_func) last_modified(last_modified_func) 我们可以编写一个初期的示例,它仅仅使用最后修改日期的函数,使用这些装饰器之一: @last_modified...@etag(etag_func) @last_modified(last_modified_func) def my_view(request): # ...
主要使用的HTTP 的响应头Cache-Control来控制,也可以选择使用Last-Modified和ETag。...HTTP响应头Cache-Control建议私有缓存(例如,浏览器)和公有缓存(例如,代理)如何缓存HTTP响应以便日后重用。...ETag是又兼容HTTP/1.1的服务器返回的,用来检测一个URL的返回值是否有变化。可以被认为是Last-Modified更复杂的一个继承者。...配置ResourceHttpRequestHandler不仅仅会给根据文件的元信息添加Last-Modified,也会根据配置添加合适的Cache-Control。...头,再次请求如果客户端发送的请求和controller的cache信息匹配,会返回一个不包含响应体的304 Not Modified。
在强缓存有效期内重新发送请求,此时客户端会从缓存获取资源,但是此时,我想要的是修改后的资源,如何解决? 解决这2个问题需要用到:协商缓存。...五、协商缓存示例 协商缓存需要用到2个字段: * 响应头的Last-Modified字段 * 请求头的If-Modified-Since字段 其参数值为UTC时间字符串。...5.1 原理 第一次请求资源时,资源在响应头中设置last-modified字段,并随着响应体一起存到缓存中 下一次需要再发送请求时,请求体中会将上一次修改时间(last-modified)设置到if-modified-since...通常还会用到另一个首部字段:ETag 7.1 ETag 该字段属于响应首部字段,能告知客户端资源实体标记,将资源以字符串形式做唯一标识,服务器为每份新资源分配对应的ETag值,ETag的生成并没有统一的算法规则...首先判断请求头的etag字段与对应请求资源本身的ETag是否相等 2. 如果相等,走第5步 3.
命中强缓存条件 Cache-Control: max-age=xxx 响应头有 Expires 响应头存在ETag和Last-Modified(协商缓存)且 不存在Cache-Control:no-cache...服务器在返回资源时会生成一个唯一的ETag标识和最后修改时间,浏览器在下次请求资源时会将这些信息发送给服务器,服务器根据这些信息判断资源是否发生变化,如果没有变化则返回304 Not Modified状态码...协议缓存过程: 第一次请求服务器,服务器返回200状态码、Last-Modified时间戳、ETag签名和完整资源 浏览器保存资源内容,以及Last-Modified和ETag值 再次请求浏览器带上If-Modified-Since...(值为上次服务器返回的Last-Modified)和If-None-Match(上次服务器返回的ETag)请求头 服务器收到请求后,对比当前资源文件的最后修改时间 是否等于 If-Modified-Since...第一次访问服务器返回200和资源并记录ETag 和 Last-Modified,第二次会304 走协商缓存。 如何修改 系统更新,用户的强缓存没有过期,直接走了强缓存,导致没有访问服务器最新资源。
那么协商缓存的标识又有2种:ETag/if-None-Match 和 Last-Modified/if-Modify-Since Last-Modified/if-Modify-Since缓存 浏览器第一次发出请求一个资源的时候...ETag/if-None-Match缓存 ETag的原理和上面的last-modified是类似的。ETag则是对当前请求的资源做一个唯一的标识。该标识可以是一个字符串,文件的size,hash等。...并且把新的Etag赋值给if-None-Match来更新该值。 last-modified 和 ETag之间对比 在精度上,ETag要优先于 last-modified。...在性能上,Etag要逊于Last-Modified,Last-Modified需要记录时间,而Etag需要服务器通过算法来计算出一个hash值。 在优先级上,服务器校验优先考虑Etag。 ?...Nginx如何配置 知道Nginx虚拟机的配置文件,示例如下图: server { server_name www.qqdeveloper.com location ~* \.
本文主要讲一下如何配置nginx来开启gzip压缩。...二、命令方式查看压缩效果 使用curl命令方式,添加标头Accept-Encoding: gzip,来查看各文件的压缩结果。...1.1 200 OK Server: nginx/1.18.0 (Ubuntu) Date: Tue, 09 Feb 2021 19:04:25 GMT Content-Type: text/html Last-Modified...nginx/1.18.0 (Ubuntu) Date: Tue, 09 Feb 2021 19:06:04 GMT Content-Type: text/css Content-Length: 1024 Last-Modified...保存并关闭文件以退出。