我们正在设计具有服务器端缓存的 REST 服务。我们希望为客户端提供一个选项,即使缓存的数据尚未过期,也可以专门请求最新数据。我正在研究 HTTP 1.1 规范,看看是否存在执行此操作的标准方法,以及 Cache Revalidation and Reload Controls似乎符合我的需要。
问题:
- 我们应该只使用
缓存重新验证和重新加载控件
吗? - 如果没有,是否可以包含 If-Modified-Since header 带有纪元时间,导致服务器始终认为资源已更改?规范并没有排除这一点,但我想知道我是否滥用了:) header 的意图?
- 识别要刷新的资源的好方法是什么?在我们的例子中,仅 URL 路径是不够的,并且我不确定查询或矩阵参数是否被视为唯一 URL 的一部分。使用 ETag 怎么样? ?
最佳答案
如果您的客户端想要资源的全新表示形式,则可以指定 max-age=0
来执行此操作。这实际上是接收不早于 0 秒的响应的意图。
您提到的所有其他机制(If-Modified-Since、ETag、If-Match 等)都与缓存一起使用,以确保资源处于某种状态。仅当您明确知道资源状态有效时,它们才起作用。您可以将其视为乐观锁定。您可以针对资源何时更改或未更改发出条件请求。然而,您必须知道您是否期待改变。
正如您所说,您可能会滥用 If-Modified-Since
,但 max-age
可以更好地传达您的意图。
另请注意,根据设计,一路上可能有多个缓存,而不仅仅是服务器端缓存。大多数情况下,客户端也会进行缓存,并且可能还有其他透明缓存。
关于rest - HTTP 客户端如何向服务器请求最新数据/刷新缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35260179/