http和tcp協(xié)議

1.?TCP協(xié)議對應于傳輸層,而HTTP協(xié)議對應于應用層

2.?Http協(xié)議是建立在TCP協(xié)議基礎(chǔ)之上

3.?Http是無狀態(tài)的短連接,而TCP是有狀態(tài)的長連接

TCP協(xié)議對應于傳輸層,而HTTP協(xié)議對應于應用層,從本質(zhì)上來說,二者沒有可比性。Http協(xié)議是建立在TCP協(xié)議基礎(chǔ)之上的,當瀏覽器需要從服務器獲取網(wǎng)頁數(shù)據(jù)的時候,會發(fā)出一次Http請求。Http會通過TCP建立起一個到服務器的連接通道,當本次請求需要的數(shù)據(jù)完畢后,Http會立即將TCP連接斷開,這個過程是很短的。所以Http連接是一種短連接,是一種無狀態(tài)的連接。所謂的無狀態(tài),是指瀏覽器每次向服務器發(fā)起請求的時候,不是通過一個連接,而是每次都建立一個新的連接。如果是一個連接的話,服務器進程中就能保持住這個連接并且在內(nèi)存中記住一些信息狀態(tài)。而每次請求結(jié)束后,連接就關(guān)閉,相關(guān)的內(nèi)容就釋放了,所以記不住任何狀態(tài),成為無狀態(tài)連接。

隨著時間的推移,html頁面變得復雜了,里面可能嵌入了很多圖片,這時候每次訪問圖片都需要建立一次tcp連接就顯得低效了。因此Keep-Alive被提出用來解決效率低的問題。從HTTP/1.1起,默認都開啟了Keep-Alive,保持連接特性,簡單地說,當一個網(wǎng)頁打開完成后,客戶端和服務器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會關(guān)閉,如果客戶端再次訪問這個服務器上的網(wǎng)頁,會繼續(xù)使用這一條已經(jīng)建立的連接Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。雖然這里使用TCP連接保持了一段時間,但是這個時間是有限范圍的,到了時間點依然是會關(guān)閉的,所以我們還把其看做是每次連接完成后就會關(guān)閉。后來,通過Session, Cookie等相關(guān)技術(shù),也能保持一些用戶的狀態(tài)。但是還是每次都使用一個連接,依然是無狀態(tài)連接。

以前有個概念很容忍搞不清楚。就是為什么Http是無狀態(tài)的短連接,而TCP是有狀態(tài)的長連接?Http不是建立在TCP的基礎(chǔ)上嗎,為什么還能是短連接?現(xiàn)在明白了,Http就是在每次請求完成后就把TCP連接關(guān)了,所以是短連接。而我們直接通過Socket編程使用TCP協(xié)議的時候,因為我們自己可以通過代碼區(qū)控制什么時候打開連接什么時候關(guān)閉連接,只要我們不通過代碼把連接關(guān)閉,這個連接就會在客戶端和服務端的進程中一直存在,相關(guān)狀態(tài)數(shù)據(jù)會一直保存著。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容