HTTP/2 推送承诺行为

HTTP/2 Push promise behavior

我正在为 HTTP/2 编写一个弹性客户端。 我想知道客户端的行为应该是什么,如果服务器发送了 PUSH_PROMISE 然后未能发送 PUSH_RESPONSE,与 PUSH_PROMISE 相关?

我查看了 HTTP/2 规范,关于 Push Response,但它没有说明在这种情况下我们应该做什么。

是否有明确的方法来解决这个问题?

客户端当然可以自由地再次请求相同的资源。例如,当服务器发送 PUSH_PROMISE.

时,服务器无法知道客户端是否正在同时请求同一资源。
Client                  Server
------                  ------
HEADERS[sid:1, GET /]
                         HEADERS[sid:1, /], DATA [sid:1], PUSH_PROMISE[sid:2]
HEADERS[sid:3, GET /css] HEADERS[sid:2, /css], DATA[sid:2]
                         HEADERS[sid:3, /css], DATA[sid:3]


客户端取消推送的标准方法是通过 RST_STREAM.

重置承诺的流

PUSH PROMISE - 所有服务器推送流都是通过 PUSH-PROMISE 帧启动的,这表明服务器打算将所描述的资源推送到客户端并需要交付在请求推送资源的响应数据之前。满足此要求的最简单策略是在 parent 的响应之前发送所有 PUSH-PROMISE 帧,其中仅包含承诺资源的 HTTP headers。

PUSH_PROMISE 方法用于应用 HTTP/2 服务器推送,因为服务器创建 PUSH_PROMISE 帧到正常浏览器启动流的响应部分。具有 HTTP 连接的请求上下文的响应 objects 用于服务器推送。例如,在具有 HTTP 连接的应用程序的 Page_load 方法下,可以使用应用程序 Response.PUSHPROMISE 推送所有相关的脚本、样式和图像,而客户端不必请求每个明确地