【问题标题】:HTTP Cache with Request Authorization具有请求授权的 HTTP 缓存
【发布时间】:2015-11-16 08:46:48
【问题描述】:

是否存在 HTTP 缓存和请求授权之间交互的标准?

让我们想象一下这种情况:一个站点的不同 url 受到基于角色的授权系统的保护。如何将内容缓存与请求授权结合起来?是否有任何 RFC 断言的方法?

  1. FoS 描述了代理缓存向调用的 GET url 发送 HEAD 请求以检查可访问性的方法。这似乎与 HTTP RFC 不冲突的方式。在RFC 7231HEAD 目的:

此方法可用于获取 关于所选表示的元数据,而无需传输 表示数据,通常用于测试超文本链接 有效性、可访问性和最近的修改。

似乎很有效,但描述不完整。根据 RFC 服务器 should send Cache-Control: no-cache 防止链中的其他缓存缓存。 该架构看起来像是耦合的——它是非 RFC 行为,因此应该手动配置。

  1. 另一方面,问题似乎可以通过Cache-Control: no-cache 指令和条件请求RFC 7232 来解决。这种方法不像前一种方法那么有效:每次都应该验证先决条件。它应该与当前代理引擎一起工作的主要优点。我没有发现与 RFC 的重大矛盾,但 IMO 条件请求不是为请求授权而设计的。

  2. 也可以应用一些技巧。 HTTP 是否为这种情况定义了机制?或者至少是广泛传播的做法?

【问题讨论】:

    标签: http caching authorization varnish http-caching


    【解决方案1】:

    默认情况下,在 Varnish 中,仅缓存没有“Cookie”或“授权”标头的 GET 和 HEAD 请求。这被烘焙到默认的 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);
    # }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2015-03-08
      • 2016-12-27
      • 2021-04-26
      相关资源
      最近更新 更多