發送請求後,HTTP客戶端使用的套接字如何正確關閉?還是必須保持開放(雙向)直至收到完整回覆?如果是這樣,請求體的結束如何由服務器確定?HTTP:發送請求後寫入的關閉套接字?
根據http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4,關閉套接字不是請求的選項。這對我來說聽起來並不合理 - 如果客戶端在關閉其一半的套接字後不嘗試傳輸任何東西,爲什麼半關閉的TCP連接對服務器來說是個問題?客戶端仍然可以接收數據。
在我看來,關閉套接字的寫入部分將是讓服務器知道請求已完成的一種非常實用的方法。 http://docs.python.org/howto/sockets.html#disconnecting甚至具體提到該用例。
如果這確實是錯誤的做法,那麼有什麼選擇?我是否總是必須發送「Content-length」或使用分塊傳輸來使服務器正確地找到請求的結尾?這對身體未知長度的請求如何工作?
因此,它是強制性使用分塊傳輸編碼或發送一個「Content-Length」標頭的請求身體的所有請求?我知道這將是一個明智的做法,但實際上是在標準中的某處指定的嗎? – lxgr 2012-01-13 21:28:24
如果請求具有正文,則必須包含足夠的信息以供服務器確定正文的大小。閱讀RFC 2616第4.3節(消息體)和4.4(消息長度)。 – 2012-01-13 21:55:15