簡體   English   中英

http客戶端如何將http響應與請求(使用Netty)或一般情況相關聯?

[英]How does a http client associate an http response with a request (with Netty) or in general?

http端點是否應該響應來自特定客戶端的請求以便接收它們?

如果在代理后面的集群處理的請求或者使用NIO處理的請求(其中一個請求比另一個請求完成得更快)沒有意義的話怎么辦?

是否有一種標准方法可以將唯一ID與每個http請求相關聯以與響應相關聯? 如何處理像http components httpclient或curl這樣的客戶端?

問題歸結為以下情況:

假設,我從服務器下載文件並且請求未完成。 客戶端是否能夠在相同的保持連接上完成其他請求?

每當打開TCP連接時,源端口和目標端口以及IP地址都會識別連接。 因此,如果我在目標端口80(HTTP的默認設置)上連接到www.google.com,我需要一個操作系統將生成的免費源端口。

然后將Web服務器的回復發送到源端口(和IP)。 這也是NAT工作的方式,記住哪個源端口屬於哪個內部IP地址(反之亦然,用於傳入連接)。

至於你的編輯:不,單個http連接可以同時執行一個命令(GET / POST / etc)。 如果在從先前發出的命令中檢索數據時發送另一個命令,則結果可能因客戶端和服務器實現而異。 例如,我想Apache會在發送第一個請求的數據后傳輸第二個請求的結果。

我不會重寫CodeCaster的答案,因為它的措辭非常好。

回應你的編輯 - 沒有。 它不是。 單個持久性HTTP連接一次只能用於一個請求,否則會非常混亂。 因為HTTP沒有定義任何形式的請求/響應跟蹤機制,所以根本不可能。

應該注意的是,還有其他協議使用類似的消息格式(符合RFC822 ),它允許這樣做(使用SIP的cSeq頭等機制),並且可以在自定義HTTP應用程序中實現這一點,但HTTP沒有定義任何標准機制來執行此操作,因此無法做任何可以假定在任何地方都可以工作的事情。 它還會對第二條消息的響應產生問題 - 您是否在發送第二個響應之前等待第一個響應完成,或者在發送第二個響應時嘗試暫停第一個響應? 您將如何以保證消息不會被破壞的方式進行通信?

另請注意,SIP(通常)通過UDP運行,這不保證數據包排序,這使得cSeq系統成為必需。

如果要在另一個事務仍在進行時向服務器發送請求,則需要創建與服務器的新連接,從而創建新的TCP流。

Facebook在構建他們的CDN時對此做了一些研究,他們得出結論,你可以在任何時候有效地擁有2或3個開放的HTTP流,但由於額外的數據包開銷成本,任何更多都會減少總體傳輸時間。 如果我能找到鏈接,我會鏈接到博客條目...

暫無
暫無

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

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