2011-03-25 167 views
2

我已經觀察到一個HTTP 1.1服務器實現,它終止客戶端連接,只要它檢測到其傳出通道的客戶端連接關閉(或者更確切地說,在發送適當的http響應之前或之後)。這是否符合HTTP 1.1實現?符合HTTP 1.1服務器和客戶端連接半關閉

RFC 2616第8.1.4節似乎暗示這是正確行爲:

當客戶端或服務器希望超時,它應該發出優美 關閉傳輸連接上。客戶和服務器應該不斷地注意運輸關閉的另一側,並且 適當地對其進行響應。

...

服務器不應該關閉發送響應,除非網絡或客戶端故障懷疑中間的連接。

我說得對嗎?在HTTP 1.1的上下文中是否有關於半關閉連接處理的更明確引用?

回答

1

據我所知,這就是我們需要知道的半封閉連接。

如果服務器檢測到客戶端關閉了連接(它可以在服務器即將寫入套接字時結束)或請求結束時關閉連接(如果它不支持connection: keep-alive)。

客戶端可以斷開任何時間,但它應該告訴服務器爲什麼它斷開(time_out,請求取消)。但是那些編寫套接字組件的人並不是很使用它。當他們需要強制time_out時,他們只關閉了插座。

但客戶端實現不是問題。你應該擔心服務器的實現,因爲這些意外的斷開連接會受到很大的影響。

編輯

也許這些鏈接可以幫助你。

Transmission Control Protocol - Functional Specification

TRANSMISSION CONTROL PROTOCOL

+0

...所以你在說什麼w.r.t.到原始問題,是否允許符合HTTP 1.1的服務器在發送HTTP響應之前終止連接(通過發送「FIN」) - 接收到來自客戶端的FIN數據包? – hvr 2011-03-30 10:21:42

+0

HTTP客戶端如何告訴服務器它斷開連接的原因?這是HTTP規範的一部分,我可以在哪裏找到更多關於它的內容? – hvr 2011-03-30 10:24:38

+0

客戶端不說爲什麼會斷開連接。它只是開始斷開握手(發送fin,syn等),然後斷開連接。這是斷開連接的正確方式,但有時它可以在不向服務器發送任何內容的情況下簡單斷開連接。如果你想知道客戶端爲什麼斷開連接,你必須自己實現它(但它不是HTTP規範的一部分)。 – 2011-03-30 12:09:09

相關問題