簡體   English   中英

我怎么知道什么時候關閉HTTP 1.1 Keep-Alive連接?

[英]How do I know WHEN to close an HTTP 1.1 Keep-Alive Connection?

我正在用Java編寫Web服務器,我希望它支持HTTP 1.1 Keep-Alive連接。 但是,如何判斷客戶端何時發送給定連接的請求? (如雙線或類似物)。

讓我們看看stackoverflow如何處理這個非常模糊的問題 - 谷歌在技術規范和模糊語言中陷入困境的答案。 我想要一個非C程序員的簡明英語答案:)


我知道了。 這證實了我懷疑不得不依賴於SocketTimeoutException。 但是我不確定我是否可以從客戶端依賴它來表明它已完成連接 - 這將允許我在大多數情況下更快地關閉連接 - 而不是等待超時。 謝謝

如果您正在構建滿足標准的服務器,那么您已經獲得了很多信息來指導您。

簡單說一下它應該基於自使用連接以來的時間,而不是基於請求數據的級別。

以較長的方式,HTTP / 1.1文檔的實際考慮部分為您提供了一些指導:

“服務器通常會有一些超時值,超出這些值后,它們將不再維持非活動連接。代理服務器可能會使此值更高,因為客戶端可能會通過同一服務器建立更多連接。持久性的使用連接對客戶端或服務器的超時長度(或存在)沒有要求。“

要么

“當客戶端或服務器希望超時時,應該在傳輸連接上發出正常關閉。客戶端和服務器應該經常關注傳輸關閉的另一端,並在適當時對其進行響應。如果是客戶端或服務器沒有及時檢測到對方的關閉可能會導致網絡上不必要的資源消耗。“

讓我們看看stackoverflow如何處理這個非常模糊的問題 - 谷歌在技術規范和模糊語言中陷入困境的答案。

我剛才應該何時關閉HTTP 1.1連接? 進入谷歌,第三個打擊是HTTP Made Really Easy。 在目錄中,有一個指向標題為持久連接的部分和“連接:關閉”標題的鏈接 這部分是三段長,使用非常簡單的語言,並准確地告訴你你想知道什么。

我想要一個非C程序員的簡明英語答案:)

在充分尊重的情況下,編程是一項技術性工作,其中細節非常重要。 閱讀技術文檔是絕對必要的技能。 依靠“普通英語”第三方對規范的解釋只會導致你做得不好。

你可以隨時關閉它。 標頭表示客戶端希望您保持連接打開,但這不需要服務器遵守。 大多數服務器將其打開大約5-10秒,有些服務器根本不關注它。

您應該閱讀處理Keep-Alive功能的RFC。 否則,您可能最終得到的服務器無法按預期工作。

正如@ [Stephen]已經指出的那樣,服務器可以隨時隨地關閉連接(好吧,不是在請求/響應對的中間)。 同樣適合客戶。 任何其他解決方案都允許服務器或客戶端在另一方上執行DoS。

編輯:看看Connection標題。 客戶端(和服務器)可以使用標頭請求正常的連接關閉。 例如, Connection: close請求是服務器在發送響應后關閉連接的請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM