Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带授权的HTTP缓存_Http_Caching_Http Caching - Fatal编程技术网

带授权的HTTP缓存

带授权的HTTP缓存,http,caching,http-caching,Http,Caching,Http Caching,根据OAuth规范,如果web服务器的响应包含授权头,HTTP缓存是否有用 Request1 Authorization : AUTHTOKEN Request2 Authorization : ANOTHERAUTOTOKEN 在这种情况下,给定HTTP缓存,第二个请求将返回第一个用户的缓存响应。对于跨用户的通用内容来说,这不是问题,但共享缓存为其他用户提供响应感觉是错误的 同样地,如果我们使用Vary头并根据授权进行更改,这意味着我们的缓存将为每个令牌存储一个缓存副本,这肯定会破坏HTTP

根据OAuth规范,如果web服务器的响应包含
授权
头,HTTP缓存是否有用

Request1 Authorization : AUTHTOKEN
Request2 Authorization : ANOTHERAUTOTOKEN
在这种情况下,给定HTTP缓存,第二个请求将返回第一个用户的缓存响应。对于跨用户的通用内容来说,这不是问题,但共享缓存为其他用户提供响应感觉是错误的

同样地,如果我们使用
Vary
头并根据
授权进行更改,这意味着我们的缓存将为每个令牌存储一个缓存副本,这肯定会破坏HTTP缓存的目的。浏览器本地缓存(private)可以正常工作,但这仍然意味着每个用户在每个会话中至少有一次原始请求

编辑

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

因此,我的问题是,给定一个既有通用响应(所有用户的响应相同)又有用户特定响应的API,缓存是否可能?有s-maxage和public头,但有授权头意味着如果我正确地遵循RFC,缓存将解析UserA对UserB、UserC等的响应。

请参阅:

“缓存不得存储对任何请求的响应,除非: 请求方法被缓存理解并定义为可缓存,以及
…如果缓存是共享的,除非响应明确允许,否则授权标头字段(请参阅[RFC7235]的第4.2节)不会出现在请求中,“

我不确定,但您认为自定义标头上的每用户唯一校验和值会有什么变化:

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

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

我很困惑。见第1点。使用缓存设置,s-max-age与max-age一起设置。RFC 2616已过时。请阅读第3节的全部内容,特别是第3.2节。谢谢@Julian。我已经更新了我的问题,使之更加具体,因为我仍然不完全清楚这是如何工作的。在缓存中,授权内容的缓存似乎是我最困惑的问题。我有一个特定的问题是基于一个场景的,该场景收到的回复增加了更多的混乱。能否请您澄清在这种情况下如何利用缓存?是否有人找到了解决方案?能否请您更新您现在对授权资源进行缓存的方式?