具有授权的HTTP缓存

时间:2015-03-03 16:19:04

标签: http caching http-caching

根据OAuth规范,如果来自包含Authorization标头的Web服务器的响应,HTTP缓存是否无效?

Request1 Authorization : AUTHTOKEN
Request2 Authorization : ANOTHERAUTOTOKEN

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

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

修改

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

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

2 个答案:

答案 0 :(得分:4)

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

"缓存不得存储对任何请求的响应,除非: 请求方法由高速缓存理解并定义为可高速缓存,和  ...如果共享缓存,则Authorization头字段(参见[RFC7235]的第4.2节)不会出现在请求中,除非响应明确允许,..."

答案 1 :(得分:0)

我不确定,但您对具有唯一每个用户校验和值的自定义标头有何看法:

x-login-checksum: john_903243482
Vary: x-login-checksum

在我看来,在这种情况下,我们可以在每个用户的会话之间缓存响应。那不行吗?