我正在尝试控制来自我的服务器的资源缓存,并且我已经验证将以下标头放在我的 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 响应?
我有一些想法,但它们都是自定义解决方案,对我来说似乎是在重新发明轮子:
只需有一些自定义查询来检查资源的上次修改日期。(这是最明显的方法)
在服务器上有一个与资源更新状态独立保持同步的缓存,以便服务器可以非常快速地检查资源修改,可能使用 Spring Framework 中的 DB 表侦听器(这比必须更有效)每次都为每个客户端做一个查询,但是实现起来比较复杂)