rest - HTTP 客户端如何向服务器请求最新数据/刷新缓存?

标签 rest http caching cache-control

我们正在设计具有服务器端缓存的 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/

相关文章:

github - 用github Action 缓存npm依赖

仅为PHP应用程序缓存图像

java - 如何在 Tomcat 上的 JAX-RS (Jersey) 中返回 HTTP 404 JSON/XML 响应?

java - 设置 POST RequestMethod 时发送 GET 请求

java - Retrofit/OkHttp 删除 Transfer-Encoding header

c# - 有什么方法可以允许/阻止使用 c#/Java Script/Response header 的浏览器记住密码提示。

css - 缓存差异 btw "/image.png"和 "/image.png?xyz"?

mysql - Flask 中剩余查询参数的模式

javascript - 访问控制允许来源不允许 AJAX 来源 null

angular - http服务缓存