2017-11-25 56 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

例如,如果客戶端迫切需要已承諾的資源之一,則可以取消推送的資源併發出對具有高優先級的資源的請求。