簡體   English   中英

如果 HTTP 持久連接上的請求需要很長時間,客戶端會超時嗎?

[英]Will client timeout if a request on HTTP persistent connection takes a long time?

如果我們有一個 HTTP 持久連接,但是其中一個請求需要很長時間(比如 30 秒)。 假設客戶端的超時時間為 15 秒。

  1. 在持久連接上使用時是否尊重客戶端的請求超時?

  2. 如果是,那么連接是否中斷?

  3. 有什么方法可以避免整個連接中斷,而只是在該特定請求上超時?

  1. 客戶端可以指定超時,但這取決於使用客戶端超時的服務器配置或它自己的超時配置。 默認情況下,服務器端超時配置比客戶端超時配置具有更高的優先級。
  2. 對於具有不同超時配置的特定請求,在同一連接上是不可能的 但是,您可以聲明不同的 http 客戶端配置連接,並將其中一個用於默認設置,另一個用於需要更多超時值的請求,但它們不在相同的保持連接。
    注意,在客戶端超時配置中,我們有兩種不同類型的超時
    1- 打開連接超時 2- 讀取響應超時。
    第一個聲明用於服務器和客戶端之間的開放連接,第二個聲明用於聲明客戶端需要多長時間來獲得其請求的響應。

這取決於您使用的客戶端以及服務器的配置方式。 問題更復雜......在http設置keep-alive不會避免傳輸級別的tcp超時,您還需要將tcp超時設置為keep-alive ,但是服務器可能不想為您保持連接只要你願意。 對於持久連接,最好使用udp而不是tcp - 它沒有如此嚴格的流量控制。 另一件事是HTTP/2根本沒有keep-alive這樣的東西,因為事情的處理方式與HTTP/1完全不同。 來自HTTP/2 RFC

8.1.2.2. 特定於連接的標頭字段

HTTP/2 不使用 Connection 頭字段來指示
特定於連接的頭字段; 在這個協議中,連接-
特定的元數據通過其他方式傳達。 端點不得
生成包含特定於連接的標頭的 HTTP/2 消息
領域; 任何包含特定連接頭域的消息都必須被視為格式錯誤(第 8.1.2.6 節)。

唯一的例外是 TE 頭域,它可以是
存在於 HTTP/2 請求中; 當它是時,它不得包含任何
“預告片”以外的價值。

這意味着將 HTTP/1.x 消息轉換為 HTTP/2 的中介將需要刪除由
連接頭字段,以及連接頭字段
本身。 此類中介還應刪除其他連接-
特定的頭字段,例如 Keep-Alive、Proxy-Connection、
Transfer-Encoding 和 Upgrade,即使它們不是由 Connection 標頭字段指定的。

暫無
暫無

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

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