簡體   English   中英

持久性HTTP客戶端一次可以發送多個請求嗎?

[英]Can an persistent HTTP client send more than one request at a time?

我正在編寫一個HTTP代理服務器,我注意到許多客戶端使用“Connection:Keep-Alive”標頭來保持持久連接。 客戶端是否可能在服務器處理第一個HTTP請求之前發送另一個HTTP請求?

例如,客戶端發送“GET / HTTP / 1.1”,但在服務器有機會響應之前,客戶端發送“GET /favicon.ico HTTP / 1.1”。 那可能嗎? 或者客戶端會在發送第二個請求之前暫停響應嗎?

此外,在使用持久連接時,是否可以安全地假設通過該連接的所有請求都具有相同的“Host:”標頭?

“另外,當使用持久連接時,假設通過該連接的所有請求都具有相同的”Host:“標題是否安全?”

我不這么認為,請參閱HTTPbis P1,第2.2節

收件人必須孤立地考慮連接中的每條消息; 因為HTTP是無狀態協議,所以不能假設同一連接上的兩個請求來自同一客戶端或共享任何其他公共屬性。 特別是,中介可能會將來自不同客戶端的請求混合到一個服務器連接中。 請注意,某些現有的HTTP擴展(例如,[RFC4559])違反了此要求,從而可能導致互操作性和安全性問題。

是的,客戶端可以管道請求。 (見http://en.wikipedia.org/wiki/HTTP_pipelining )。

轉動你的最后一個問題......對於一個客戶來說,假設對一個管道提供多個主機的請求是不安全的。 可能沒有直接在Host:標題上解決您的問題的規范,但可以肯定它們將是相同的。

關於第一個問題:

客戶端是否可能在服務器處理第一個HTTP請求之前發送另一個HTTP請求?

我相信是的,它是可能的(也許我錯了,我記得幾年前已經閱讀過;最終的答案是在HTTP協議規范中)。 但我不明白你為什么這么問。 此外,客戶端可以同時打開幾個TCP連接到同一個HTTP服務器。 當然,你有許多同時發生的客戶。

關於第二個問題

此外,在使用持久連接時,是否可以安全地假設通過該連接的所有請求都具有相同的“Host:”標頭?

我相信情況通常如此,但我不認為這是肯定的。 我可以想象一些聰明的HTTP客戶端,認識到具有不同Host:頭的兩個URL共享相同的IP,可以重用相同的連接。

但我不明白你為什么這么問。 已經發明了持久的HTTP連接以最小化TCP連接,這是非常昂貴的,並且您要問的兩個問題是極端的。 也許很少有HTTP客戶端正在執行您今天所描述的內容

你應該嚴格對待你發送的內容(符合標准的一致性),但要接受你接受的內容。

暫無
暫無

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

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