用于经过身份验证的 REST api 的 HTTP 缓存

Eve*_*ert 2 api rest caching http

我目前正在构建一个 REST API。无论谁访问资源,我创建的许多资源将始终相同。少数没有的将有一个Vary: Authorization标题。

有两个例外:

  1. 如果您未通过身份验证,您将收到 401 响应。
  2. 对于您无权访问的某些资源,您可能会收到 403 响应。

我的问题是,在这种情况下,是否仍然可以正确设置缓存。特别是,我想使用反向代理(例如 nginx、varnish 或 haproxy)来卸载主服务。

这个问题有优雅的解决方案吗?

Mar*_*ham 5

Vary: Authorization是不必要的;对授权请求的响应是自动私有的,不会被共享缓存缓存。

您可以发送Cache-Control: public以覆盖它;可以使用正常规则缓存具有该响应的响应。

但是,如果您希望这些响应保持经过身份验证,则需要进行身份验证。您也可以通过发送来做到这一点Cache-Control: no-cache,这将强制缓存在提供存储的响应之前检查源。

如果您只想让您的反向代理(例如,Varnish、nginx)进行缓存,则它可能有一种配置方式,可以在“边缘”上实施身份验证,当请求具有正确的响应时从缓存中提供响应验证。查看其文档以获取详细信息。

  • Cache-Control: no-cache 如何帮助实施身份验证?是不是因为它会尝试与服务器重新验证缓存的项目,这意味着它必须发送请求,并且该请求需要经过身份验证才能从服务器获取 304? (3认同)