HTTP協(xié)議通信過(guò)程
當(dāng)我們?cè)跒g覽器的地址欄輸入“www.baidu.com”然后按回車(chē),這之后發(fā)生了什么事,我們直接看到的是打開(kāi)了對(duì)應(yīng)的網(wǎng)頁(yè),那么內(nèi)部客戶(hù)端和服務(wù)端是如何通信的呢? 1、 1、URL自動(dòng)解析 HTTP URL包含了用于查找某個(gè)資源的足夠信息,基本格式如下:HTTP://host[“:”port][abs_path],其中HTTP表示桶蓋HTTP協(xié)議來(lái)定位網(wǎng)絡(luò)資源;host表示合法的主機(jī)域名或IP地址,port指定一個(gè)端口號(hào),缺省80;abs_path指定請(qǐng)求資源的URI;如果URL中沒(méi)有給出abs_path,那么當(dāng)它作為請(qǐng)求URI時(shí),必須以“/”的形式給出,通常這個(gè)工作瀏覽器自動(dòng)幫我們完成。 例如:輸入www.163.com;瀏覽器會(huì)自動(dòng)轉(zhuǎn)換成:HTTP://www.163.com/ 2、獲取IP,建立TCP連接 瀏覽器地址欄中輸入"HTTP://www.xxx.com/"并提交之后,首先它會(huì)在DNS本地緩存表中查找,如果有則直接告訴IP地址。如果沒(méi)有則要求網(wǎng)關(guān)DNS進(jìn)行查找,如此下去,找到對(duì)應(yīng)的IP后,則返回會(huì)給瀏覽器。 當(dāng)獲取IP之后,就開(kāi)始與所請(qǐng)求的Tcp建立三次握手連接,連接建立后,就向服務(wù)器發(fā)出HTTP請(qǐng)求。 3、客戶(hù)端瀏覽器向服務(wù)器發(fā)出HTTP請(qǐng)求 一旦建立了TCP連接,Web瀏覽器就會(huì)向Web服務(wù)器發(fā)送請(qǐng)求命令,接著以頭信息的形式向Web服務(wù)器發(fā)送一些別的信息,之后瀏覽器發(fā)送了一空白行來(lái)通知服務(wù)器,它已經(jīng)結(jié)束了該頭信息的發(fā)送。 4、Web服務(wù)器應(yīng)答,并向?yàn)g覽器發(fā)送數(shù)據(jù) 客戶(hù)機(jī)向服務(wù)器發(fā)出請(qǐng)求后,服務(wù)器會(huì)客戶(hù)機(jī)回送應(yīng)答, HTTP/1.1 200 OK 應(yīng)答的第一部分是協(xié)議的版本號(hào)和應(yīng)答狀態(tài)碼,正如客戶(hù)端會(huì)隨同請(qǐng)求發(fā)送關(guān)于自身的信息一樣,服務(wù)器也會(huì)隨同應(yīng)答向用戶(hù)發(fā)送關(guān)于它自己的數(shù)據(jù)及被請(qǐng)求的文檔。 Web服務(wù)器向?yàn)g覽器發(fā)送頭信息后,它會(huì)發(fā)送一個(gè)空白行來(lái)表示頭信息的發(fā)送到此為結(jié)束,接著,它就以Content-Type應(yīng)答頭信息所描述的格式發(fā)送用戶(hù)所請(qǐng)求的實(shí)際數(shù)據(jù) 5、Web服務(wù)器關(guān)閉TCP連接 一般情況下,一旦Web服務(wù)器向?yàn)g覽器發(fā)送了請(qǐng)求數(shù)據(jù),它就要關(guān)閉TCP連接,然后如果瀏覽器或者服務(wù)器在其頭信息加入了這行代碼 Connection:keep-alive TCP連接在發(fā)送后將仍然保持打開(kāi)狀態(tài),于是,瀏覽器可以繼續(xù)通過(guò)相同的連接發(fā)送請(qǐng)求。保持連接節(jié)省了為每個(gè)請(qǐng)求建立新連接所需的時(shí)間,還節(jié)約了網(wǎng)絡(luò)帶寬。 |
|
來(lái)自: Frank Library > 《信息技術(shù)》