【问题标题】:Is an HTTP/2 server allowed to send PRIORITY frames?是否允许 HTTP/2 服务器发送 PRIORITY 帧?
【发布时间】:2020-08-07 18:23:26
【问题描述】:

我希望服务器推送一堆内容,但我希望它按顺序推送。显然,服务器可以按顺序发送内容,但如果服务器可以实际设置流依赖关系(使其明确,允许客户端在不同意时更改优先级等),那就太好了。这是允许的吗?具体来说,我想立即发送一个 PUSH_PROMISE 后跟一个 PRIORITY 帧,以将承诺的流设置为前一个流的依赖项。

【问题讨论】:

    标签: http2


    【解决方案1】:

    很好的问题!不是一个好的答案,但这是我发现的:

    • (8.2.1) “推送的响应始终与来自客户端的显式请求相关联。服务器发送的 PUSH_PROMISE 帧在该显式请求的流上发送。PUSH_PROMISE 帧还包括承诺的流标识符,从服务器可用的流标识符中选择(参见第 5.1.1 节)” 也就是说,PUSH_PROMISE 与原始流的标头一起使用,然后它包含承诺流的 id。这样,新流依赖于原始流。

    • (6.3) 没有说谁可以发送 PRIORITY 帧,但它指的是5.3。 (5.3) 说只有客户端才能建立优先级作为 HEADERS 帧的一部分。该段的第二句话说,可以以其他方式使用 PRIORITY 框架......客户端和服务器都可以使用?不完全清楚,但如果我必须打赌,我只会说客户。

    【讨论】:

    • 我在几本书中读到,规范应该更像是一份提案,而不是一份固执己见的文件。
    【解决方案2】:

    HTTP/2 文档对此并不清楚,但对于 PRIORITY 部分,可以理解为任何人几乎可以在任何时间发送它。检查this debate,您会看到一些小组讨论了此类情况。我想说你不应该忽略它,因为如果规范没有禁止它,那么它是允许的,你应该处理它。

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 2017-03-04
      • 2017-01-09
      • 2016-02-05
      • 2017-01-10
      • 2020-04-04
      • 2019-01-29
      • 2017-09-06
      • 2017-03-07
      相关资源
      最近更新 更多