【发布时间】:2020-08-07 18:23:26
【问题描述】:
我希望服务器推送一堆内容,但我希望它按顺序推送。显然,服务器可以按顺序发送内容,但如果服务器可以实际设置流依赖关系(使其明确,允许客户端在不同意时更改优先级等),那就太好了。这是允许的吗?具体来说,我想立即发送一个 PUSH_PROMISE 后跟一个 PRIORITY 帧,以将承诺的流设置为前一个流的依赖项。
【问题讨论】:
标签: http2
我希望服务器推送一堆内容,但我希望它按顺序推送。显然,服务器可以按顺序发送内容,但如果服务器可以实际设置流依赖关系(使其明确,允许客户端在不同意时更改优先级等),那就太好了。这是允许的吗?具体来说,我想立即发送一个 PUSH_PROMISE 后跟一个 PRIORITY 帧,以将承诺的流设置为前一个流的依赖项。
【问题讨论】:
标签: http2
很好的问题!不是一个好的答案,但这是我发现的:
(8.2.1) “推送的响应始终与来自客户端的显式请求相关联。服务器发送的 PUSH_PROMISE 帧在该显式请求的流上发送。PUSH_PROMISE 帧还包括承诺的流标识符,从服务器可用的流标识符中选择(参见第 5.1.1 节)” 也就是说,PUSH_PROMISE 与原始流的标头一起使用,然后它包含承诺流的 id。这样,新流依赖于原始流。
(6.3) 没有说谁可以发送 PRIORITY 帧,但它指的是5.3。 (5.3) 说只有客户端才能建立优先级作为 HEADERS 帧的一部分。该段的第二句话说,可以以其他方式使用 PRIORITY 框架......客户端和服务器都可以使用?不完全清楚,但如果我必须打赌,我只会说客户。
【讨论】:
HTTP/2 文档对此并不清楚,但对于 PRIORITY 部分,可以理解为任何人几乎可以在任何时间发送它。检查this debate,您会看到一些小组讨论了此类情况。我想说你不应该忽略它,因为如果规范没有禁止它,那么它是允许的,你应该处理它。
【讨论】: