參考:https://www.jianshu.com/p/6e9e4156ece3
目錄
HTTP (HyperText Transfer Protocol)超文本傳輸協議.
一、概述
1.計算機網絡體系分層結構
OSI七層模型 | TCP/IP概念四層模型 | 功能 | TCP/IP協議族 |
---|---|---|---|
(1)應用層 | (1)應用層 | 文件傳輸,電子郵件,文件服務虛擬終端 | HTTP,DNS,TFTP,SNMP,FTP,SMTP,Telnet |
(2)表示層 | (1)應用層 | 數據格式化,代碼轉化,數據加密 | 沒有協議(沒有傳輸) |
(3)會話層 | (1)應用層 | 解除或者建立別的接點的聯繫 | 沒有協議 |
(4)傳輸層 | (2)傳輸層 | 提供端對端的接口 | TCP,UDP |
(5)網絡層 | (3)網絡層 | 爲數據包選擇路由 | IP,ICMP,RIP,OSPF,BGP,IGMP |
(6)數據鏈路層 | (4)鏈路層 | 傳輸有地址的幀和錯誤檢測功能 | SLIP,CSLIP,PPP,ARP,RARF,MTU |
(7)物理層 | (4)鏈路層 | 以二進制的形式在物理媒體上傳輸數據 | ISO2110,IEEE802.2 |
2.TCP /IP 通信傳輸流
(1)首先發送端客戶在應用層**(HTTP協議)發送一個頁面的HTTP請求,
(2)在傳輸層,(+TCP協議)把應用層的HTTP報文進行分割,(並在報文上打上標記序號和端口號發給網絡層.)
(3)網絡層(IP協議)(+MAC地址**)請求就齊全了,發給鏈路層發送數據
(4)鏈路層(+以太網),發送數據(如圖)
二、HTTP工作過程
1.建立TCP連接
HTTP開始工作前先建立TCP連接,(TCP、IP共同構建爲Internet,這就是著名的TCP/IP 協議,Internet又被稱作TCP、IP網絡)HTTP–>TCP–>IP,底層協議創建後才能創建更高級的協議。TCP 端口號默認80
2.客戶端發送請求命令
TCP建立後,客戶端就會向服務端發送請求命令,例如
get/sample/index.html HTTP/1.1
3.客戶端發送請求頭信息
客戶端發送請求命令後就發送請求頭信息(自身的信息比如User-Agent),(頭信息發送完全後會再發送一段空白行來通知服務器結束了頭信息的發送)
4.服務器應答
客戶端發送完成請求命令,服務器應答,例如返回
HTTP/1.1 200 OK
協議版本號 + 狀態碼
5.服務器返回相應頭信息
和客戶端發送頭信息一樣,他會發送自己的信息和被請求的文檔,
6.返回數據
發送完成頭信息後,繼續發送一個空白行來表示頭信息發送完成,然後。就一Content-Type響應頭信息的格式(例如:content-type: text/html; charset=utf-8)返回用戶所需的數據。
7.斷開TCP連接
連接立馬斷開, 除非頭信息有
Connection: keep-alive
就保持連接。(可以節省再次連接消耗的資源)但是保持但是什麼都不做的話也是消耗資源。
三、HTTP協議基礎
1.通過請求和響應完成通信(客戶端先發請求)
就是客戶端先建立通信,不然服務端不會鳥你
2.HTTP不保存狀態(可用Cookie技術)
3.使用Cookie管理之前的狀態
(1)服務端:在響應的報文中添加
SetCookie:。。。通知客戶端保存Cookie
(2)客戶端:請求報文里加上
Cookie:_uuid=4C130B0A-443F-5841-FF70-…
發送之前保存的Cookie
(3)服務端:獲取Cookie並判斷哪一個用戶,並返回對應的信息(因此有些Cookie會保存用戶的登錄信息,有安全隱患)
4. 使用URL定位資源
5.發送請求的方法(get、post)
6.持久連接
默認持久連接
7.管線化(併發同時多請求)
四、(報文)HTTP報文結構
1.報文的定義
- 用於 HTTP協議用戶交互的信息叫做報文。
- 客戶端:發送請求報文
- 服務端:回覆響應報文
- 報文是由多行(使用CR+LF(Carriage Return回車符+Line Feed換行符))爲換行符的字符串
2.報文的結構(分爲請求報文結構和響應報文結構)
報文一般由報文部首(關鍵信息)和報文主體(數據)組成(但是不一定有主體)如圖
2.1 請求報文結構
實例
2.2 報文響應結構
實例
五、(報文)請求行,行狀態
1,請求行
舉個例子:下面這個是一個HTTP的請求的報文
GET /index.html HTTP/1.1
Host: sample.com
第一行就是請求行,
- (1)get爲請求方法,參考三、5.請求的方法
- (2)/index.html是資源的對象,URL
- (3)HTTP/1.1 是 版本號,現在都是 1.1
總合來看,就是訪問 /index.html 裏面的資源
2.狀態行
舉個例子,下面是一個HTTP響應報文
HTTP/1.1 200 OK
Date: Mon, 10 Jul 2017 15:50:06 GMT
Content-Length: 256
Content-Type: text/html
第一行就是狀態行
2XX OK
3XX 重定向
4XX 客戶端錯誤
5XX 後端服務器錯誤
六、(報文)首部字段(重點分析)
1. 部首字段概述
- HTTP報文包括 報文部首和報文主體(數據)
- 報文部首包括請求(響應)行和部首字段(其中部首字段的內容最爲豐富,你檢查的時候亂七八糟的全是部首)
- 部首字段:提供報文主體大小,所使用的語言,認證信息等內容
部首字段在報文中的結構如圖