假设我公开了一个使用承载令牌认证(JWT)的REST服务(通过HTTPS),并使用Cache-Control: private
标头响应GET请求。
现在假设我的应用程序用于自助服务终端模式(多个用户使用相同的浏览器会话作为相同的操作系统用户,想想网吧或其他东西)。 User1向资源发出经过身份验证的请求。
GET /api/resource
Authorization: bearer <token1>
响应以:
开头HTTP/1.1 200 OK
Cache-Control: private
现在,User1退出我的应用程序并且User2登录。浏览器代表她向同一资源发出请求(但使用不同的JWT令牌)。
GET /api/resource
Authorization: bearer <token2>
现在我的问题是,浏览器是否会考虑从缓存中提供此服务,因为它是来自同一操作系统用户的相同请求?或者浏览器会考虑该决定中的Authorization
值吗?
如果是前者,原始响应中的Vary: Authorization
标头会改变该行为。
答案 0 :(得分:3)
根据RFC 2616, Section 14.9.1,Cache-Control: private
响应标头确实意味着共享相同浏览器会话的多个信息亭用户将获得相同的缓存响应。
是的,如RFC 2616的Section 13.6所示,添加Vary: Authorization
响应标头会有所帮助;它告诉缓存根据Vary
响应头值中列出的请求头,从资源的不同“表示”中保留/选择。
希望这有帮助!