0

我正在尝试控制来自我的服务器的资源缓存,并且我已经验证将以下标头放在我的 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”标头添加到 GET 请求中,该请求将发送到源服务器。

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

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

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

  2. 在服务器上有一个与资源更新状态独立保持同步的缓存,以便服务器可以非常快速地检查资源修改,可能使用 Spring Framework 中的 DB 表侦听器(这比必须更有效)每次都为每个客户端做一个查询,但是实现起来比较复杂)

4

1 回答 1

1

如果控制器和数据库之间有缓存层,则不必担心“If-Modified-Since”标头。

  • 只要资源没有被修改,你会很快从缓存中得到它;
  • 资源修改后,会从数据库中取回,添加到缓存层。

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

于 2014-05-19T19:18:09.363 回答