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 似乎符合我的需要。
问题:
- 我们应该只使用
Cache Revalidation and Reload Controls
吗?
- 如果不是,是否可以接受包含带有纪元时间的 If-Modified-Since header,从而导致服务器始终认为资源已更改?规范并不排除这一点,但我想知道我是否在滥用 :) header?
的意图
- 识别要刷新的资源的好方法是什么?在我们的例子中,仅 URL 路径是不够的,我不确定查询或矩阵参数是否被视为唯一 URL 的一部分。使用 ETag 怎么样?
如果您的客户想要一个全新的资源表示,它可以指定 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
响应指令,但它也适用于后续请求。
我们正在设计具有 server-side 缓存的 REST 服务。我们想为客户端提供一个选项,即使缓存数据尚未过期,也可以专门请求最新数据。我正在研究 HTTP 1.1 规范,看看是否存在执行此操作的标准方法,Cache Revalidation and Reload Controls 似乎符合我的需要。
问题:
- 我们应该只使用
Cache Revalidation and Reload Controls
吗? - 如果不是,是否可以接受包含带有纪元时间的 If-Modified-Since header,从而导致服务器始终认为资源已更改?规范并不排除这一点,但我想知道我是否在滥用 :) header? 的意图
- 识别要刷新的资源的好方法是什么?在我们的例子中,仅 URL 路径是不够的,我不确定查询或矩阵参数是否被视为唯一 URL 的一部分。使用 ETag 怎么样?
如果您的客户想要一个全新的资源表示,它可以指定 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
响应指令,但它也适用于后续请求。