HTTP請求的整個過程
1. HTTP簡介
HTTPweb瀏覽器和服務(wù)器之類的交互過程必須遵守的協(xié)議.他是tcp/ip中的一個應(yīng)用協(xié)議。用來協(xié)議數(shù)據(jù)交換過程和數(shù)據(jù)本身的格式,主要的有HTTP/1.0和HTTP1.1.
HTTP/1.0和HTTP/1.1都把TCP作為底層的傳輸協(xié)議。
HTTP客戶首先發(fā)起建立與服務(wù)器TCP連接。一旦建立連接,瀏覽器進(jìn)程和服務(wù)器進(jìn)程就可以通過各自的套接字來訪問TCP。如前所述,客戶端套接字是客戶進(jìn)程和TCP連接之間的“門”,服務(wù)器端套接字是服務(wù)器進(jìn)程和同一TCP連接之間的 “門”。客戶往自己的套接字發(fā)送HTTP請求消息,也從自己的套接字接收HTTP響應(yīng)消息。類似地,服務(wù)器從自己的套接字接收HTTP請求消息,也往自己 的套接字發(fā)送HTTP響應(yīng)消息??蛻艋蚍?wù)器一旦把某個消息送入各自的套接字,這個消息就完全落入TCP的控制之中。
TCP給HTTP提供一個可靠的數(shù)據(jù)傳輸服務(wù);這意味著由客戶發(fā)出的每個HTTP請求消息最終將無損地到達(dá)服務(wù)器,由服務(wù)器發(fā)出的每個HTTP響應(yīng)消息最終也將無損地到達(dá)客戶。我們可從中看到分層網(wǎng)絡(luò)體系結(jié)構(gòu)的一個明顯優(yōu)勢——HTTP不必?fù)?dān)心數(shù)據(jù)會丟失,也無需關(guān)心TCP如何從數(shù)據(jù)的丟失和錯序中恢復(fù)出來的細(xì)節(jié)。這些是TCP和協(xié)議棧中更低協(xié)議層的任務(wù)。
TCP還使用一個擁塞控制機(jī)制。該機(jī)制迫使每個新的TCP連接一開始以相對緩慢的速率傳輸數(shù)據(jù),然而只要網(wǎng)絡(luò)不擁塞,每個連接可以迅速上升到相對較高的速率。這個慢速傳輸?shù)某跏茧A段稱為緩啟動(slow start)。
需要注意的是,在向客戶發(fā)送所請求文件的同時,服務(wù)器并沒有存儲關(guān)于該客戶的任何狀態(tài)信息。即便某個客戶在幾秒鐘內(nèi)再次請求同一個對象,服務(wù)器也不會響應(yīng)說:自己剛剛給它發(fā)送了這個對象。相反,服務(wù)器重新發(fā)送這個對象,因為它已經(jīng)徹底忘記早先做過什么。既然HTTP服務(wù)器不維護(hù)客戶的狀態(tài)信息,我們于是 說HTTP是一個無狀態(tài)的協(xié)議(stateless protocol)。
2. 一個完整的HTTP請求過程
HTTP事務(wù)=請求命令+響應(yīng)結(jié)果
一次完整的請求過程:
(1)域名解析
(2)建立TCP連接,三次握手
(3)Web瀏覽器向Web服務(wù)端發(fā)送HTTP請求報文
(4)服務(wù)器響應(yīng)HTTP請求
(5)瀏覽器解析HTML代碼,并請求HTML代碼中的資源(JS,CSS,圖片)(這是自動向服務(wù)器請求下載的)
(6)瀏覽器對頁面進(jìn)行渲染呈現(xiàn)給客戶
(7)斷開TCP連接