是否存在HTTP缓存和请求授权之间的交互标准?
让我们想象一下:网站的不同网址受基于角色的授权系统的保护。如何将内容缓存与请求授权相结合?是否有任何RFC声称的方法?
FoS描述了代理缓存向已调用的GET URL发送HEAD请求以检查可访问性时的方法。它似乎与HTTP RFC不冲突。在RFC 7231 HEAD目的:
此方法可用于获取 关于所选表示的元数据而不转移 表示数据,通常用于测试超文本链接 有效性,可访问性和最近的修改。
看起来很有效,但描述不完整。根据RFC服务器should send Cache-Control: no-cache
,以防止链中的其他缓存进行缓存。
该架构看起来像耦合 - 它是非RFC行为,因此应该手动配置。
另一方面,似乎问题可以通过Cache-Control: no-cache
指令和条件请求RFC 7232来解决。这种方法不像前一种那样有效:每次都应该验证前提条件。它应该与当前代理引擎一起使用的主要优点。我没有发现与RFC存在重大矛盾,但IMO条件请求不是为请求授权而设计的。
也可以应用一些黑客攻击。 HTTP是否为这种情况定义了机制?或者至少是广泛传播的做法?
答案 0 :(得分:1)
默认情况下,在Varnish中只缓存没有“Cookie”的GET和HEAD请求 - 或“授权”-Header。这被烘焙到默认的VCL中。在Ubuntu上:/etc/varnish/default.vcl:
# sub vcl_recv {
# ...
# if (req.request != "GET" && req.request != "HEAD") {
# /* We only deal with GET and HEAD by default */
# return (pass);
# }
# if (req.http.Authorization || req.http.Cookie) {
# /* Not cacheable by default */
# return (pass);
# }
# return (lookup);
# }