揭開HTTP網(wǎng)絡(luò)協(xié)議神秘面紗系列(一)
1.了解Web及網(wǎng)絡(luò)基礎(chǔ)
TCP/IP協(xié)議族按層次可以分為下面四層:
應(yīng)用層:決定了向用戶提供應(yīng)用服務(wù)時通信的活動,TCP/IP協(xié)議族內(nèi)預存了各類通用的應(yīng)用服務(wù),比如:FTP(文件傳輸協(xié)議)和DNS(域名系統(tǒng))服務(wù)就是其中兩類,HTTP協(xié)議也處于該層。
傳輸層:對上層應(yīng)用,提供處于網(wǎng)絡(luò)連接中的兩臺計算機之間的數(shù)據(jù)傳輸。在傳輸層有兩個性質(zhì)不同的協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報協(xié)議)
網(wǎng)絡(luò)層:用來處理在網(wǎng)絡(luò)上流動的數(shù)據(jù)包,數(shù)據(jù)包是網(wǎng)絡(luò)的傳輸最小數(shù)據(jù)單位,該層規(guī)定了通過怎樣的路徑(所謂的傳輸路線)到達對方計算機,并把數(shù)據(jù)包傳送給對方。與對方計算機之間通過多臺計算機或網(wǎng)絡(luò)設(shè)備進行傳輸時,網(wǎng)絡(luò)層所起的作用就是在眾多的選項內(nèi)選擇一條傳輸路線。
鏈路層:用來處理連接網(wǎng)絡(luò)的硬件部分,包括控制操作系統(tǒng),硬件的設(shè)備驅(qū)動,NIC,及光纖等物理可見部分(還包括連接器等一切傳輸媒介),硬件上的范疇均在鏈路層的作用范圍之內(nèi)。
利用TCP/IP協(xié)議族進行網(wǎng)絡(luò)通信時,會通過分層順序與對方進行通信,發(fā)送端從應(yīng)用層往下走,接收端則往應(yīng)用層往上走,就拿發(fā)送端的客戶端在應(yīng)用層(HTTP協(xié)議)發(fā)出一個想看某個Web頁面的HTPP請求為例,如下圖示:
發(fā)送端在層與層之間傳輸數(shù)據(jù)時,每經(jīng)過一層時必定會被打上一個該層所屬的首部信息,反之,接收端在層與層傳輸數(shù)據(jù)時,每經(jīng)過一層時會把對應(yīng)的首部消去,這種把數(shù)據(jù)信息包裝起來的做法稱為封裝。
負責傳輸?shù)腎P協(xié)議:作用是把各種數(shù)據(jù)包傳送給對方,其指明了節(jié)點被分配到的地址,而MAC地址是指網(wǎng)卡所屬的固定地址,IP間的通信依賴MAC地址,在網(wǎng)絡(luò)上,通信的雙方在同一局域網(wǎng)內(nèi)的情況較少,通常是經(jīng)過多臺計算機和網(wǎng)絡(luò)設(shè)備中轉(zhuǎn)才能連接到對方,在中轉(zhuǎn)時,會利用下一站中轉(zhuǎn)設(shè)備的MAC地址來搜索下一個中轉(zhuǎn)目標,這時,會采用ARP協(xié)議(ARP是一種用以解析地址的協(xié)議,根據(jù)通信方的IP地址就可以反查出對應(yīng)的MAC地址)。例子如圖:
#p#
TCP協(xié)議為了準確無誤的將數(shù)據(jù)送達目標處,TCP協(xié)議采用了三次握手策略,其握手過程中用了三個標記:FLAG-SYN和ACK,該過程如圖:
注意:若在握手過程中某個階段莫名中斷,TCP協(xié)議會再次以相同的順序發(fā)送相同的數(shù)據(jù)包。*
DNS服務(wù)是和HTTP協(xié)議一樣位于應(yīng)用層的協(xié)議,它提供域名到IP地址之間的解析服務(wù)其兩者關(guān)系如圖:
各種協(xié)議與HTTP協(xié)議的關(guān)系就如圖所示:
URI用字符標識某一互聯(lián)網(wǎng)資源,而URL表示資源的地點(互聯(lián)網(wǎng)上所處的位置),故URL是URI的子集。
URI格式通常包括以下幾個:
登陸信息
服務(wù)器地址(IP或域名)
服務(wù)器端口號
帶層次的文件路徑
查詢字符串
片段標識
URI格式例子如圖:
黑色:協(xié)議方案名
紅色:登陸信息(認證)
淺綠色:服務(wù)器地址
淺藍色:服務(wù)器端口號
紫色:帶層次的文件路徑
深藍色:查詢字符串
深綠色:片段標識符
#p#
2.簡單的HTTP協(xié)議
請求報文:是由請求方法,請求URI,協(xié)議版本,可選的請求首部字段和內(nèi)容實體構(gòu)成的。
響應(yīng)報文:基本上由協(xié)議版本,狀態(tài)碼(表示請求成功或失敗的數(shù)字代碼),用以解釋狀態(tài)碼的原因短語,可選的響應(yīng)首部字段以及實體主體構(gòu)成。
HTTP是一種不保存狀態(tài)的協(xié)議,即不保留之前一切的請求或響應(yīng)報文的信息,為了解決這問題,許多網(wǎng)站引入了Cookie技術(shù),例如:許多登陸網(wǎng)站就是用Cookie技術(shù)來保持登陸狀態(tài)。
告知服務(wù)器意圖的HTTP方法有以下幾個:
- GET:獲取資源,如果請求的資源是文本,那就保持原樣返回,如果是像CGI那樣的程序,則返回經(jīng)過執(zhí)行后的輸出結(jié)果。
- POST:主要用來傳輸實體的主體,而不是獲取響應(yīng)的主體內(nèi)容。
- PUT:傳輸文件,要求請求報文中包含文件內(nèi)容,但是HTTP/1.1PUT方法自身不帶驗證機制,任何人都可以上傳文件,存在安全性問題,故一般有開發(fā)此功能的Web網(wǎng)站都會配合Web應(yīng)用程序的驗證機制,如:REST機制。
HEAD:不獲取返回報文主體部分,而是獲取其URI的有效性及資源更新的日期時間等首部字段。
DELETE:用來刪除文件,但是HTTP/1.1Delete方法自身也不帶驗證機制,任何人都可以刪除文件,存在安全性問題,故一般有開發(fā)此功能的Web網(wǎng)站都會配合Web應(yīng)用程序的驗證機制,如:REST機制。
OPTIONS:用來查詢針對請求URI指定的資源。
TRACE:在用其發(fā)送請求時,在Max-Forwards首部字段中填入數(shù)值,每經(jīng)過一個服務(wù)器端就將該數(shù)字減1,當數(shù)值剛好減到0時,就停止繼續(xù)傳輸,最后接收到請求的服務(wù)器端則返回狀態(tài)碼200OK的響應(yīng),因此可以查詢發(fā)送出去的請求是怎樣被加工修改的。
CONNECT:要求在與代理服務(wù)器通信時建立隧道,實現(xiàn)用隧道協(xié)議進行TCP通信,主要使用SSL和TLS協(xié)議把通信內(nèi)容加密后經(jīng)網(wǎng)絡(luò)隧道傳輸。
HTTP持久連接:keep-alive(持久連接)的特點是,只要任意一端沒有明確提出斷開連接,則保持TCP連接狀態(tài),好處在于減少了TCP連接的重復建立和斷開所造成的額外開銷,減輕了服務(wù)器端的負載,也減少了開銷的那部分時間,是HTTP請求和響應(yīng)能夠更早的結(jié)束。
管管線化技術(shù)可以讓客戶端同時并行發(fā)送多個請求,而不需要一個接一個地等待響應(yīng)。
HTTP是無狀態(tài)協(xié)議優(yōu)勢在于它減少服務(wù)器的CPU及內(nèi)存資源的消耗,但它不能保持之前的狀態(tài)進行請求處理,這樣需要在登陸認證的Web頁面中那個,每次請求 跳轉(zhuǎn)頁面都需要再次認證登陸或附上請求認證參數(shù),因此為了解決這個問題,可以引用Cookie技術(shù),該過程如圖: