http keep-alive與tcp keep-alive
tcp keep-alive
tcp keep-alive提供的是一種鏈路有效檢測機制,當鏈路建立之後,可能經過很長時間應用程式一直沒傳送資料,這時有可能鏈路因為某種原因已經失效了,如果對這種情況不做處理那肯定有問題,tcp對於這種情況提供了keep-alive機制,該機制在作業系統核心有3個配置引數:
- /proc/sys/net/ipv4/tcp_keepalive_time
- /proc/sys/net/ipv4/tcp_keepalive_intvl3
- /proc/sys/net/ipv4/tcp_keepalive_probes
當tcp鏈路空閒超過tcp_keepalive_time時間後,伺服器核心會向客戶端傳送探測報文,來檢測tcp連線是否正常,如果收到客戶端的ack,那麼在下次空閒時間再一次超過tcp_keepalive_time後再進行檢測;如果沒有收到客戶端的ack,那麼隔tcp_keepalive_intvl3時間後再發一次檢測鏈路的空報文,如果重試tcp_keepalive_probes次後依然沒有收到客戶端的ack,則判定連線已失效,關閉連線。
雖然tcp的keep-alive機制能夠定時清理失效的連線,但這個tcp_keepalive_time時間一般比較長,tcp預設是2小時,在關閉失效連線前如果客戶端發起通訊則會失敗,所以不能完全通過該機制解決鏈路有效性問題。
tcp的keep-alive機制傳送的探測報文是將之前TCP報文的序列號減1,並設定1個位元組,內容為“00”的應用層資料,這樣對端能識別這個報文是tcp keep-alive探測報文並進行ack。
http keep-alive
http keep-alive是應用層的機制,是http server端的一種長連線機制。該機制彌補了http請求每次請求都要建立連線的缺陷,只要客戶端在keep-alive時間內發起下一次請求,就能複用之前的連線。
在HTTP/1.0協議中,客戶端通過在http請求頭中新增一個欄位 Connection: Keep-Alive,當伺服器收到附帶有Connection: Keep-Alive的請求時,它也會在響應頭中新增一個同樣的欄位來使用Keep-Alive。這樣客戶端不會主動斷開該連線,在下次http請求直接用該連線,除非兩次請求的間隔超過了keep-alive的時間。當http server端檢測到該連線超過了keep-alive時間還沒有收到請求,就會斷開該連線。
在HTTP/1.1協議中,keep-alive預設實現,不需要客戶端在http請求頭中新增Connection: Keep-Alive。
相關文章
- 關於 Http 協議中的 keep-alive 與 Tcp keep-aliveHTTP協議Keep-AliveTCP
- node http keep-alive demoHTTPKeep-Alive
- HTTP協議頭部與Keep-Alive模式詳解HTTP協議Keep-Alive模式
- TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一個東西嗎?TCPHTTPKeep-Alive
- 關於 HTTP 協議中的 keep-aliveHTTP協議Keep-Alive
- vue <keep-alive>VueKeep-Alive
- vue keep-aliveVueKeep-Alive
- keep-alive元件使用Keep-Alive元件
- HTTP Keep-Alive模式客戶端與伺服器如何判定傳輸完成HTTPKeep-Alive模式客戶端伺服器
- Jmeter的客戶端實現與Keep-AliveJMeter客戶端Keep-Alive
- 長連線及在Node中的應用——HTTP/1.1 keep-aliveHTTPKeep-Alive
- 開啟 Keep-Alive 可能會導致http 請求偶發失敗Keep-AliveHTTP
- keep-alive:元件級快取Keep-Alive元件快取
- 客戶端禁用Keep-alive, 服務端開啟Keep-alive,會怎麼樣?客戶端Keep-Alive服務端
- 從一起丟包故障來談談 nginx 中的 tcp keep-aliveNginxTCPKeep-Alive
- HTTP 請求頭部欄位中 connection - keep-alive 的含義HTTPKeep-Alive
- [譯] HTTP 的進化 - 0.9、1.0、1.1、Keep-Alive、Upgrade 和 HTTPSHTTPKeep-Alive
- Vue中keep-alive元件的理解VueKeep-Alive元件
- vue的keep-alive中使用EventBusVueKeep-Alive
- 徹底揭祕keep-alive原理Keep-Alive
- Vue keep-alive實踐總結VueKeep-Alive
- Vue 頁面快取keep-aliveVue快取Keep-Alive
- VUE快取:動態keep-aliveVue快取Keep-Alive
- HTTP、Socket與TCPHTTPTCP
- Vue 3 路由元件快取keep-aliveVue路由元件快取Keep-Alive
- [20200224]觀察使用TCP keep-alive feature特性.txtTCPKeep-Alive
- Socket程式設計-長連線與短連線,心跳(keep-alive)程式設計Keep-Alive
- 實現vue 的keep-alive快取功能VueKeep-Alive快取
- vue2的keep-alive的總結VueKeep-Alive
- [20200225]觀察使用TCP keep-alive feature特性2.txtTCPKeep-Alive
- ??TCP協議:超時重傳、流量控制、keep-alive和埠號,你真的瞭解嗎?TCP協議Keep-Alive
- 聊聊keep-alive元件的使用及其實現原理Keep-Alive元件
- React 怎麼實現 Vue 的 <keep-alive> 元件ReactVueKeep-Alive元件
- Vue中keep-alive的深入理解和使用VueKeep-Alive
- vue的另一個內建元件keep-aliveVue元件Keep-Alive
- vue中動態化的按需使用keep-aliveVueKeep-Alive
- vue中keep-alive保持使用過的狀態VueKeep-Alive
- nginx 伺服器是否要關閉keep-aliveNginx伺服器Keep-Alive