用于认证REST api的HTTP缓存



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

有两个例外:

  1. 如果您没有被认证,您将得到一个401响应。
  2. 你可能会得到一个403响应的一些资源,你没有访问。

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

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

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

你可以发送Cache-Control: public来覆盖这个;可以使用正常规则缓存具有该属性的响应。

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

如果你只是想让你的反向代理(例如,Varnish, nginx)做缓存,很可能它有一种被配置为在"边缘"上强加身份验证的方式,当请求有适当的身份验证时,从缓存中提供响应。

最新更新