HTTP/2 推送承诺行为
HTTP/2 Push promise behavior
我正在为 HTTP/2 编写一个弹性客户端。
我想知道客户端的行为应该是什么,如果服务器发送了 PUSH_PROMISE 然后未能发送 PUSH_RESPONSE,与 PUSH_PROMISE 相关?
我查看了 HTTP/2 规范,关于 Push Response,但它没有说明在这种情况下我们应该做什么。
- 如果没有收到推送响应,我们是否应该再次发送原始请求?如果原请求发送成功,再次发送可能会出问题,不是吗?
- 还是我们应该忽略 PUSH_PROMISE 并继续?那样的话,假设服务器承诺发送一个文件,但没有发送,会发生什么?
是否有明确的方法来解决这个问题?
客户端当然可以自由地再次请求相同的资源。例如,当服务器发送 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
为 推送所有相关的脚本、样式和图像,而客户端不必请求每个明确地
我正在为 HTTP/2 编写一个弹性客户端。 我想知道客户端的行为应该是什么,如果服务器发送了 PUSH_PROMISE 然后未能发送 PUSH_RESPONSE,与 PUSH_PROMISE 相关?
我查看了 HTTP/2 规范,关于 Push Response,但它没有说明在这种情况下我们应该做什么。
- 如果没有收到推送响应,我们是否应该再次发送原始请求?如果原请求发送成功,再次发送可能会出问题,不是吗?
- 还是我们应该忽略 PUSH_PROMISE 并继续?那样的话,假设服务器承诺发送一个文件,但没有发送,会发生什么?
是否有明确的方法来解决这个问题?
客户端当然可以自由地再次请求相同的资源。例如,当服务器发送 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
为 推送所有相关的脚本、样式和图像,而客户端不必请求每个明确地