【问题标题】:http2: order of push promise datahttp2:推送承诺数据的顺序
【发布时间】:2018-05-09 10:31:33
【问题描述】:

spec 说:

服务器应该在之前发送 PUSH_PROMISE(第 6.6 节)帧 发送任何引用承诺响应的帧。这避免了 客户在收到任何请求之前发出请求的竞赛 PUSH_PROMISE 帧。

例如,如果服务器收到对文档的请求 包含指向多个图像文件和服务器的嵌入式链接 选择将这些额外的图像推送到客户端,发送 包含图像的 DATA 帧之前的 PUSH_PROMISE 帧 链接确保客户端能够看到资源将 在发现嵌入链接之前推送。

在给出的示例中,我假设服务器可以在“包含多个图像文件的嵌入链接的文档”之前或之后发送图像数据。

所有这些都允许吗?

A系列

  1. 客户端请求文档
  2. 服务器发送图像的 PUSH_PROMISE
  3. 服务器发送文档
  4. 服务器发送图片

B 系列

  1. 客户端请求文档
  2. 服务器发送图像的 PUSH_PROMISE
  3. 服务器发送图片
  4. 服务器发送文档

C系列

  1. 客户端请求文档
  2. 服务器发送图像的 PUSH_PROMISE
  3. 服务器同时发送图像/文档,即帧被穿插

(在所有情况下,当客户端发出对图像的请求时,它会阻止它们在本地通过承诺的流 id 接收。)

【问题讨论】:

    标签: promise http2


    【解决方案1】:

    所有三个选项都适用于服务器。 例如,Jetty 实现选项 C。

    但是,我不会对客户端的行为做出任何假设,假设它会等待,因为它收到了PUSH_PROMISE

    例如,如果客户端迫切需要已承诺的资源之一,它可能会取消推送的资源并发出对该资源的高优先级请求。

    【讨论】:

    • "如果客户端急需已承诺的资源之一,它可能会取消推送的资源,并以高优先级发出对该资源的请求。"在承诺流上发送高优先级帧的另一种选择是什么?
    • 为推送的流发送PRIORITY 帧可能是另一种选择。和上面提到的一样,它与发送资源的服务器竞争(当高优先级请求或PRIORITY帧到达服务器时,它可能已经发送了整个资源),取决于服务器是否实现优先级.
    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2015-12-22
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多