TCP協定對應於傳輸層,而HTTP協定對應於應用層,本質上來說,二者沒有可比性。 Http協定是建立在TCP協定基礎之上的,當瀏覽器需要從伺服器取得網頁資料的時候,會發出一次Http請求。
Http會透過TCP建立起一個到伺服器的連線通道,當本次要求所需的資料完畢後,Http會立即將TCP連線斷開,這個過程是很短的。所以Http連接是一種短連接,是一種無狀態的連接。所謂的無狀態,是指瀏覽器每次向伺服器發起請求的時候,不是透過一個連接,而是每次都建立一個新的連接。如果是連接的話,伺服器進程中就能保持住這個連線並且在記憶體中記住一些資訊狀態。而每次請求結束後,連線就關閉,相關的內容就釋放了,所以記不住任何狀態,變成無狀態連線。
推薦課程:PHP教學。
隨著時間的推移,html頁面變得複雜了,裡面可能嵌入了很多圖片,這時候每次訪問圖片都需要建立一次tcp連接就顯得低效了。因此Keep-Alive被提出用來解決效率低的問題。從HTTP/1.1起,預設都開啟了Keep-Alive,保持連線特性,簡單地說,當一個網頁開啟完成後,客戶端和伺服器之間用於傳輸HTTP資料的TCP連線不會關閉,如果客戶端再次造訪這個伺服器上的網頁,會繼續使用這一條已經建立的連接Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的伺服器軟體(如Apache)中設定這個時間。
雖然這裡使用TCP連接保持了一段時間,但是這個時間是有限範圍的,到了時間點依然是會關閉的,所以我們還把其看做是每次連接完成後就會關閉。後來,透過Session, Cookie等相關技術,也能維持一些使用者的狀態。但是還是每次都使用一個連接,還是無狀態連接。
以前有個概念很容忍搞不清楚。就是為什麼Http是無狀態的短連接,而TCP是有狀態的長連接? Http不是建立在TCP的基礎上嗎,為什麼還能是短連結?
現在明白了,Http就是每次要求完成後就把TCP連線關了,所以是短連線。而我們直接透過Socket程式設計使用TCP協定的時候,因為我們自己可以透過程式碼區控制什麼時候開啟連線什麼時候關閉連接,只要我們不透過程式碼把連線關閉,這個連線就會在客戶端和服務端的進程中一直存在,相關狀態資料會一直保存。
HTTP是屬於應用層的物件導向的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。它於1990年提出,經過幾年的使用與發展,並不斷地完善與擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規範化工作正在進行中,而且HTTP-NG(Next Generation of HTTP)的建議已經提出。
HTTP協定的主要特點可概括如下:
1.支援客戶/伺服器模式。
2.簡單快速:客戶向伺服器要求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯繫的類型不同。由於HTTP協定簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。
3.靈活:HTTP允許傳輸任意類型的資料物件。正在傳輸的類型由Content-Type加以標記。
4.無連線:無連線的意義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
5.無狀態:HTTP協定是無狀態協定。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的訊息,則它必須重傳,這可能導致每次連接傳送的資料量增加。另一方面,在伺服器不需要先前資訊時它的應答就較快。
以上是http協定和tcp協定的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!