gpt4 book ai didi

java - 处理来自服务器端的条件 HTTP GET 请求的好方法是什么?也就是说,包含 "If-Modified-Since" header 的 GET 请求?

转载 作者:行者123 更新时间:2023-12-01 12:57:54 36 4
gpt4 key购买 nike

我正在尝试控制来自服务器的资源缓存,并且我已经验证将以下 header 放在我的 HTTP 响应上会导致浏览器按预期缓存资源。

Cache-Control: must-revalidate, max-age=30
Last-Modified: Mon May 19 11:21:05 GMT 2014
Expires: Mon May 19 11:51:05 GMT 2014

当浏览器缓存中的资源过期时,来自该特定客户端的对该资源的下一个 GET 包含“If-Modified-Since” header ,该 header 将添加到 GET 请求中,从而使其发送到源服务器。

特别是在 Java Web 应用程序上下文中,当服务器端收到这些条件 GET 请求时,有什么好的方法可以确定服务器端的资源是否已更改,以便可以决定是返回 304 Not Modified 还是 200 OK回应?

我有一些想法,但它们都是自定义解决方案,对我来说似乎是重新发明轮子:

  1. 只需使用一些自定义查询来检查资源的上次修改日期。 (这是最明显的方法)

  2. 在服务器上有一个缓存,独立地与资源更新状态保持同步,以便服务器可以非常快速地检查资源修改,也许可以使用 Spring 框架中的数据库表监听器(这将比每次都为每个客户端进行查询效率更高,但实现起来更复杂)

最佳答案

如果 Controller 和数据库之间有缓存层,则不必担心“If-Modified-Since” header 。

  • 只要资源不被修改,您就可以很快地从缓存中获取它;
  • 资源修改后,将从数据库中检索并添加到缓存层。

检查修改后的数据可能比从缓存获取资源慢,因为它会访问数据库。

关于java - 处理来自服务器端的条件 HTTP GET 请求的好方法是什么?也就是说,包含 "If-Modified-Since" header 的 GET 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23745437/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com