HTTP 客户端如何向服务器请求最新的 data/to 刷新缓存?

How can a HTTP client request the server for latest data/to refresh cache?

我们正在设计具有 server-side 缓存的 REST 服务。我们想为客户端提供一个选项,即使缓存数据尚未过期,也可以专门请求最新数据。我正在研究 HTTP 1.1 规范,看看是否存在执行此操作的标准方法,Cache Revalidation and Reload Controls 似乎符合我的需要。

问题:

如果您的客户想要一个全新的资源表示,它可以指定 max-age=0 来实现。这实际上是 intent 接收不早于 0 秒的响应。

您提到的所有其他机制(If-Modified-Since、ETag、If-Match 等)都与缓存一起工作以确保资源处于某种状态。它们仅在您明确知道您拥有资源的有效状态时才起作用。您可以将其视为乐观锁定。您可以针对资源更改或未更改的时间发出条件请求。但是你必须知道你是否期待改变。

您可能会像您所说的那样误用 If-Modified-Since,但 max-age 可以更好地传达您的意图。

另请注意,根据设计,一路上可能会有多个缓存,而不仅仅是您的服务器端缓存。大多数情况下,客户端也会缓存,途中可能还有其他透明缓存。

根据section-5.2.1.4,似乎无缓存请求指令最符合我的需要。

The "no-cache" request directive indicates that a cache MUST NOT use a stored response to satisfy the request without successful validation on the origin server.

后面的请求什么都没说,这正是我想要的。 section-5.2.2.2 中还有一个 no-cache 响应指令,但它也适用于后续请求。