具有授权的HTTP缓存

Fin*_*las 10 caching http http-caching

根据AuthorizationOAuth规范包含标头的Web服务器的响应,HTTP缓存是否有用?

Request1 Authorization : AUTHTOKEN
Request2 Authorization : ANOTHERAUTOTOKEN
Run Code Online (Sandbox Code Playgroud)

在这种情况下,给定HTTP缓存,第二个请求将返回第一个用户的缓存响应.对于跨用户通用的内容而言,这不是问题,但是对于共享缓存为其他用户提供响应而言,这是错误的.

同样,如果我们使用Vary标头并改变Authorization,这意味着我们的缓存将为每个标记存储一个缓存副本,这肯定会破坏HTTP缓存的目的.浏览器本地缓存(私有)可以正常工作,但这仍然意味着每个会话至少一次来自每个用户的原始请求.

编辑

有问题的服务需要对所有请求进行授权,但是根据我所阅读的内容,除非存在must-revalidate,public和s-maxage,否则不应该从包含授权标头的共享缓存中提供响应.

因此,我的问题是,鉴于API既具有通用性(所有用户的响应相同),又具有用户特定的响应,甚至可以进行缓存?拥有s-maxage和公共标头但是授权标头意味着如果我正确地遵循RFC,缓存将解决UserA对UserB,UserC等的响应.

Jul*_*hke 5

参见http://greenbytes.de/tech/webdav/rfc7234.html#response.cacheability

“高速缓存不得存储对任何请求的响应,除非:高速缓存可以理解该请求方法并将其定义为可缓存的,并且...授权标头字段(请参见[RFC7235]的4.2节)不会出现在请求,如果缓存是共享的,除非响应明确允许它,否则...”

  • 授权内容的缓存似乎是缓存中最令我困惑的事情。我有一个具体的问题[这里](http://stackoverflow.com/questions/39060208/authorization-check-for-http-caches)基于收到响应的场景,这增加了更多的混乱。您能否澄清一下在这种情况下如何利用缓存? (2认同)
  • 有没有人找到解决方案? (2认同)