HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。
HTTP屬於應用層協議,在傳輸層使用TCP協議,在網絡層使用IP協議。
IP協議主要解決網絡路由和尋址問題,TCP協議主要解決如何在IP層之上可靠的傳遞數據包,使在網絡上的另一端收到發端發出的所有包,並且順序與發出順序一致。
TCP有可靠,面向連接的特點。
在HTTP/1.0中,默認使用的是短連接。
也就是說,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。
如果客戶端訪問的某個HTML或其他類型的Web資源,如JavaScript文件、圖像文件、CSS文件等。
當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話。
但從HTTP/1.1起,默認使用長連接,用以保持連接特性。
在使用長連接的情況下,當一個網頁打開完成后,客戶端和服務器之間用於傳輸HTTP數據的 TCP連接不會關閉。
如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。
長連接短連接區別:
1.服務器端空間管理上:
Keep-Alive不會永久保持連接,因為TCP連接將會越來越多,直到把服務器的TCP連接數量撐爆到上限為止,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間;
短連接對於服務器來說管理較為簡單,存在的連接都是有用的連接,不需要額外的控制手段。
2.時間上:
在客戶請求頻繁的情況下:若使用短連接,將在TCP的建立和關閉操作上浪費時間和帶寬;
若使用長連接,就可以節省很多這樣的消耗;
長連接有兩個問題:
a.HTTP 1.1 基於串行文件傳輸數據,因此這些請求必須是有序的,所以實際上我們只是節省了建立連接的時間,而獲取數據的時間並沒有減少
b.最大並發數問題,假設我們在 Apache 中設置了最大並發數 300,而因為瀏覽器本身的限制,最大請求數為 6,那么服務器能承載的最高並發數是 50
在HTTP2中解決了這兩個問題,詳情請看:https://www.cnblogs.com/vickylinj/p/14194264.html