Http

HTTP流水線:在請求主體完成之前產生響應

  • January 5, 2018

我知道 HTTP 客戶端有可能在 TCP 連接上發送下一個請求,即使它沒有收到其先前請求的響應 - 這稱為 HTTP 流水線。

但是,HTTP 伺服器是否可以在完全接收到請求之前開始傳輸響應?是否有管理這種行為的 RFC?

例如,想像一個服務通過 HTTP POST 接收一些數據,進行一些轉換,並用轉換後的數據進行響應。如果可以以流方式完成轉換,那麼即使請求正文不完整,伺服器也可以開始生成響應正文。

如果標準明確描述並支持這樣的操作,我會感到驚訝(因為它非常罕見,你可以確定你收到的部分請求包含足夠的資訊來開始產生響應),但我希望它在大多數情況下都會起作用。幾乎可以肯定,在客戶端完成發送請求之前,您發送回的任何響應數據都不會被客戶端讀取,因此它會坐在讀取緩衝區中,直到客戶端開始讀取,此時它會認為,“blimey真快!” 並開始愉快地咀嚼。它不會意識到數據已經在建築物內……

我敢肯定,有一些奇怪的 HTTP 客戶端實現會通過它的發送循環做一些奇怪的事情,如果它在完成寫入請求之前發現套接字是可讀的,它就會嚇壞,但找到這些的唯一方法是嘗試出來看看有什麼問題。也就是說,幾乎所有事情都是如何在 HTTP 領域完成的——以及如何制定新的標準行為(有人做了一些瘋狂的事情,這變得足夠流行以至於其他人都必須適應,所以 IETF WG 說“好吧,我們’將使該行為成為標準,然後")。

引用自:https://serverfault.com/questions/888939