2017-11-25 54 views
0

spec的顺序表示:http2:推承诺数据

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

例如,如果服务器接收为一个文件含有嵌入式链接到多个图像文件和服务器 选推那些附加图像给客户端 的请求时,包含该图像数据帧之前发送 PUSH_PROMISE帧 链接确保客户端在发现嵌入式链接之前能够看到资源将被推送到 。

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

所有这些都允许吗?

系列A

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

B系列

  1. 客户端请求记录
  2. 服务器发送
  3. 服务器发送图像
  4. 服务器发送文档

系列C

  1. 客户端请求的文件
  2. 服务器发送图像的PUSH_PROMISE图像PUSH_PROMISE
  3. 服务器发送图像/文件同时地,即帧被散布

(在所有情况下,当客户机的图像的请求时,正在对所承诺的流ID本地接收它在他们的块。)

回答

1

所有三个选项对于服务器是可行的。 例如,Jetty实现选项C.

不过,我不会让客户端的行为的任何假设,假设它会等待,因为它收到的PUSH_PROMISE

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