首页
学习
活动
专区
圈层
工具
发布

在Spring Boot中实现HTTP缓存

要公开资源的修改日期,您应该设置Last-Modified标头。Spring的ResponseEntity构建器有一个名为lastModified()的特殊方法,它可以帮助您以正确的格式分配值。...客户端根据Last-Modified标头的值设置其值,该标头是与此特定资源的先前响应一起发送的。...然后,我们将日期与If-Modified-Since标头的值进行比较,并在正匹配上返回一个空。否则,服务器发送具有Last-Modified标头的适当值的完整响应主体。...Last-Modified vs ETag 正如我已经提到的,Last-Modified标头不太精确,因为它具有一秒的精度。为了获得更高的精度,请选择ETag。...我们还讨论了服务器端验证并比较了Last-Modified和ETag标头。最后,您了解了如何在Spring应用程序中设置全局ETag过滤器。

6K50

如何在Ubuntu 16.04上使用Nginx的头模块实现浏览器缓存

此模块可用于向响应添加任意任意标头,但其主要作用是正确设置缓存标头。在本教程中,我们将了解如何使用Nginx的头模块来实现浏览器缓存。...使用Web浏览器时,如果浏览器想要再次请求相同的文件(例如,刷新页面时),ETag则会将值存储并发送回带有If-None-Match请求标头的服务器。 我们可以使用以下命令在命令行上模拟它。...使用ETag命令的问题是浏览器总是向服务器发送一个请求,询问它是否可以重用其缓存文件。即使服务器以304响应而不是再次发送文件,仍然需要时间来发出请求并接收响应。...第3步 - 配置缓存控制和过期标头 除了ETag文件验证头之外,还有两个缓存控制响应头:Cache-Control和Expires。...如果未设置标头,浏览器将始终从服务器请求文件,期望200 OK或304 Not Modified响应。 我们可以使用头模块来设置这些HTTP头。

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

    如何在CentOS 7上使用Nginx的头模块实现浏览器缓存

    此模块可用于向响应添加任意任意标头,但其主要作用是正确设置缓存标头。在本教程中,我们将了解如何使用Nginx的头模块来实现浏览器缓存。...使用Web浏览器时,如果浏览器想要再次请求相同的文件(例如,刷新页面时),则会将ETag值存储并发送回带有If-None-Match请求标头的服务器。 我们可以使用以下命令在命令行上模拟它。...ETag的问题是浏览器总是向服务器发送一个请求,询问它是否可以重用其缓存文件。即使服务器以304响应而不是再次发送文件,仍然需要时间来发出请求并接收响应。...第3步 - 配置缓存控制和过期标头 除了ETag文件验证头之外,还有两个缓存控制响应头:Cache-Control和Expires。...如果未设置标头,浏览器将始终从服务器请求文件,期望200 OK或304 Not Modified响应。 我们可以使用头模块来设置这些HTTP头。

    1.8K00

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

    这样就能解释上面一个问题,当响应头既有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标头的值匹配,则服务器将不发送实际文档。

    3.3K20

    跟我一起探索 HTTP-HTTP缓存

    在大多数情况下,你可以通过 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

    61851

    对不起,看完这篇HTTP,真的可以吊打面试官

    最后,如果max-age 和 expires 都不存在,就去寻找 Last-Modified 标头,如果存在此标头,则高速缓存的有效性等于 Date 标头的值减去 Last-modified 标头的值除以...Last-Modified响应标头可以用作弱验证器,因为它只有1秒可以分辨的时间。...如果响应中存在 Last-Modified标头,则客户端可以发出 If-Modified-Since请求标头来验证缓存资源。...要使用 Last-Modified 很难实现强验证,通常,这是通过使用带有资源的 MD5 哈希值的 Etag 来完成的。...客户端第一次发送请求没有,缓存为空并且没有条件请求,服务器在收到客户端请求后,设置验证器 Last-Modified 和 Etag 标签,并把这两个标签随着响应一起发送回客户端。

    7.1K21

    你还在为 HTTP 的这些概念头疼吗?

    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

    2.6K30

    震惊 | HTTP 在疫情期间把我吓得不敢出门了

    最后,如果max-age 和 expires 都不存在,就去寻找 Last-Modified 标头,如果存在此标头,则高速缓存的有效性等于 Date 标头的值减去 Last-modified 标头的值除以...Last-Modified响应标头可以用作弱验证器,因为它只有1秒可以分辨的时间。...如果响应中存在 Last-Modified标头,则客户端可以发出 If-Modified-Since请求标头来验证缓存资源。...要使用 Last-Modified 很难实现强验证,通常,这是通过使用带有资源的 MD5 哈希值的 Etag 来完成的。...如下图所示 客户端第一次发送请求没有,缓存为空并且没有条件请求,服务器在收到客户端请求后,设置验证器 Last-Modified 和 Etag 标签,并把这两个标签随着响应一起发送回客户端。

    6K20

    HTTP之缓存控制

    在强缓存有效期内重新发送请求,此时客户端会从缓存获取资源,但是此时,我想要的是修改后的资源,如何解决? 解决这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.

    68610

    一个Bug搞懂浏览器缓存策略

    命中强缓存条件 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 走协商缓存。 如何修改 系统更新,用户的强缓存没有过期,直接走了强缓存,导致没有访问服务器最新资源。

    34510

    如何通过Nginx配置来优化你的网络请求

    那么协商缓存的标识又有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 ~* \.

    1.7K10
    领券