http長連接的一些點


  1. http短連接,一般是服務器端主動關閉連接(歷史原因 https://www.zhihu.com/question/24338653
  2. http 請求header頭中通過Connection: 頭字段來指定是否需要keep-alive。 其中http1.0和http1.1關於Connection頭又有不同點
    1. http1.0不支持keepalive,所以發送頭為Connection默認為closed(Connection: close)。 即告訴服務器發送完請求后服務器就主動斷開連接(所以服務器會出現timewait)。 需要在http頭加入"Connection: Keep-Alive",才能啟用Keep-Alive
    2. http1.1 默認的Connection頭就是keep-alive(即Connection: keep-alive),除非顯式指定Connection: close。但具體是否建立長連接還要看服務器那邊是否支持keep-alive,如果nginx(或apache)將keepalive關閉,則建立的還是短連接,服務器發送完請求后就關閉連接了。如果建立了長連接了,則具體應該有哪方主動關閉連接需要看情況(見4)
  3. Connection頭具體值
    1. 請求:
      1. close(告訴WEB服務器或者代理服務器,在完成本次請求的響應后,斷開連接,不要等待本次連接的后續請求了)。
      2. keepalive(告訴WEB服務器或者代理服務器,在完成本次請求的響應后,保持連接,等待本次連接的后續請求)。
    2. 響應:
      1. close(連接已經關閉)。
      2. keep-alive(連接保持着,在等待本次連接的后續請求)。
      3. Keep-Alive: timeout。這個值能夠讓一些瀏覽器主動關閉連接,這樣服務器就不必要去關閉連接了。(見4)
  4. http 響應response頭中的Connection字段的keepalive屬性
    響應頭Keep-Alive: timeout。這個值能夠讓一些瀏覽器主動關閉連接,這樣服務器就不必要去關閉連接了
  5. 注意不同瀏覽器怎么處理“keep-alive”頭
    1. MSIE和Opera忽略掉"Keep-Alive: timeout=<N>" header.
    2. MSIE保持連接大約60-65秒,然后發送TCP RST
    3. Opera永久保持長連接
    4. Mozilla keeps the connection alive for N plus about 1-10 seconds.
    5. Konqueror保持長連接N秒
  6. Http keepalive 和tcp keepalive的區別
    http keep-alive與tcp keep-alive,不是同一回事,意圖不一樣。http keep-alive是為了讓tcp活得更久一點,以便在同一個連接上傳送多個http,提高socket的效率。而tcp keep-alive是TCP的一種檢測TCP連接狀況的保鮮機制。tcp keep-alive保鮮定時器,支持三個系統內核配置參數: 
    /proc/sys/net/ipv4/tcp_keepalive_time
    /proc/sys/net/ipv4/tcp_keepalive_intvl
    /proc/sys/net/ipv4/tcp_keepalive_probes

    keepalive是TCP保鮮定時器,當網絡兩端建立了TCP連接之后,閑置idle(雙方沒有任何數據流發送往來)了tcp_keepalive_time后,服務器內核就會嘗試向客戶端發送偵測包,來判斷TCP連接狀況(有可能客戶端崩潰、強制關閉了應用、主機不可達等等)。如果沒有收到對方的回答(ack包),則會在 tcp_keepalive_intvl后再次嘗試發送偵測包,直到收到對對方的ack,如果一直沒有收到對方的ack,一共會嘗試 tcp_keepalive_probes次,每次的間隔時間在這里分別是15s, 30s, 45s, 60s, 75s。如果嘗試tcp_keepalive_probes,依然沒有收到對方的ack包,則會丟棄該TCP連接。TCP連接默認閑置時間是2小時,一般設置為30分鍾足夠了。

    也就是說,僅當nginx的keepalive_timeout值設置高於tcp_keepalive_time,並且距此tcp連接傳輸的最后一個http響應,經過了tcp_keepalive_time時間之后,操作系統才會發送偵測包來決定是否要丟棄這個TCP連接。一般不會出現這種情況,除非你需要這樣做。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM