![](/img/trans.png)
[英]will http request timeout when server hold the connection for a long time?
[英]Will client timeout if a request on HTTP persistent connection takes a long time?
如果我們有一個 HTTP 持久連接,但是其中一個請求需要很長時間(比如 30 秒)。 假設客戶端的超時時間為 15 秒。
在持久連接上使用時是否尊重客戶端的請求超時?
如果是,那么連接是否中斷?
有什么方法可以避免整個連接中斷,而只是在該特定請求上超時?
這取決於您使用的客戶端以及服務器的配置方式。 問題更復雜......在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.