網路123 HTTP連線

2022-06-17 21:24:09 字數 1241 閱讀 5679

背景:專案遇到http連線中斷問題,經除錯

參考:http短連線(非持久連線)是指,客戶端和服務端進行一次http請求/響應之後,就關閉連線。所以,下一次的http請求/響應操作就需要重新建立連線。

http長連線(持久連線)是指,客戶端和服務端建立一次連線之後,可以在這條連線上進行多次請求/響應操作。持久連線可以設定過期時間,也可以不設定。

以http1.1協議為例子:

設定http短連線

在首部欄位中設定connection:close,則在一次請求/響應之後,就會關閉連線。

設定http長連線,有過期時間

在首部欄位中設定connection:keep-alivekeep-alive: timeout=60,表明連線建立之後,空閒時間超過60秒之後,就會失效。如果在空閒第58秒時,再次使用此連線,則連線仍然有效,使用完之後,重新計數,空閒60秒之後過期。

設定http長連線,無過期時間

在首部欄位中只設定connection:keep-alive,表明連線永久有效。

然而,問題來了。在請求頭中設定connection:keep-alive,為什麼連線空閒一段時間之後,還是斷開了呢?

這是因為http連線保持時間是由服務端的訊息頭connection欄位和keep-alive字段定的。http操作是請求/響應成對出現的,即先有客戶端發出請求,後有服務端處理請求。所以,一次http操作的終點操作在服務端上,關閉也是由服務端發起的。

區別:補充

而tcp keep-alive是tcp的一種檢測tcp連線狀況的機制,涉及到三個引數tcp_keepalive_time, tcp_keepalive_intvl, tcp_keepalive_probes。

當網路兩端建立了tcp連線之後,閒置(雙方沒有任何資料流往來)了tcp_keepalive_time後,伺服器核心就會嘗試向客戶端傳送偵測包,來判斷tcp連線狀況(有可能客戶端崩潰、強制關閉了應用、主機不可達等等)。如果沒有收到對方的回答(ack包),則會在 tcp_keepalive_intvl後再次嘗試傳送偵測包,直到收到對方的ack。如果一直沒有收到對方的ack,一共會嘗試 tcp_keepalive_probes次。如果嘗試tcp_keepalive_probes,依然沒有收到對方的ack包,則會丟棄該tcp連線。tcp連線預設閒置時間是2小時,一般設定為30分鐘足夠了。參考這裡。

網路應用 Web應用之HTTP連線

非永續性連線 nonpersistent http 每個tcp連線最多允許傳輸乙個物件 http 1.0版本使用非永續性連線 永續性連線 persistent http 每個tcp連線允許傳輸多個物件 http 1.1 版本預設使用永續性連線 從客戶端傳送乙個很小的資料報到伺服器並返回所經歷的時間 ...

http 連線復用

定義 http 1.0每次請求都需要建立新的tcp連線,連線不能復用。http 1.1新的請求可以在上次建立的tcp連線之上傳送,連線可以復用。優點 減少重複進行tcp三次握手的開銷,提高效率。注意 在同乙個tcp連線中,新的請求需要等上次請求收到響應後,才能傳送。實現 主要的思路 在傳送http的...

http連線優化

http連線的效能優化 並行連線 能夠同一時候和多台server建立http連線 持久連線 管道化連線 復用的連線 並行連線 長處 並行連線能夠在頻寬資源充足的情況下同一時候建立多個http連線,加快頁面的載入速度。缺點 並行連線在頻寬資源不足的情況下會是連線競爭資源。效率反而下降。同一時候建立多條...