1.Http底層也是通過TCP傳輸的。
2.HTTP keep-alive
Http是一個”請求-響應”
協議,它的keep-alive主要是為了讓多個http請求共享一個Tcp連接,以避免每個Http又新建一個TCP連接。每個Http服務器默認的keep-alive時間可能是不一樣的。
3.直接介紹一個場景就可能更容易明白了。客戶端發送了一個Http請求,服務器響應后,判斷這個Http
是否是keep-alive
模式的,如果不是則關閉連接,如果是keep-alive,則等待keep-alive time后再關閉,如果這期間再收到一個http 請求,則繼續等待最后一個請求的keep-alive time
時間,直到keep-alive time
時間內沒有收到請求,則關閉。
4.上面是HTTP keep-alive的,而TCP是它下一層的協議,本身TCP是長連接的,除非主動關閉。HTTP的keep-alive time一般是15ms, 30ms之類的,如果是超過了HTTP的keep-alive time
時間,則HTTP會關閉TCP連接。本身TCP是不會關閉連接的,TCP的keep alive是TCP的保鮮裝置,在keep alive timeout 后服務端發送一個監測包來判斷連接是否仍保持着,如果還是可連接,則繼續保持,它不會主動關閉連接的。而心跳包是為了防止NAT超時。