我目前正在构建一个REST API。无论谁访问资源,我创建的许多资源都是相同的。少数不是Vary: Authorization
的将有一个标题。
有两个例外:
- 如果您没有被认证,您将得到一个401响应。
- 你可能会得到一个403响应的一些资源,你没有访问。
我的问题是,在这种情况下,是否仍然有可能正确设置缓存。特别是,我想使用反向代理,如nginx, varnish或haproxy卸载主服务。
这个问题有优雅的解决方案吗?
Vary: Authorization
是不必要的;对授权请求的响应自动是私有的,不会被共享缓存缓存。
你可以发送Cache-Control: public
来覆盖这个;可以使用正常规则缓存具有该属性的响应。
但是,如果您希望这些响应保持身份验证,则需要强制进行身份验证。您也可以通过发送Cache-Control: no-cache
来做到这一点,这将强制缓存在提供存储的响应之前与源进行检查。
如果你只是想让你的反向代理(例如,Varnish, nginx)做缓存,很可能它有一种被配置为在"边缘"上强加身份验证的方式,当请求有适当的身份验证时,从缓存中提供响应。