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