你需要了解的HTTP知識都在這裏了!
前言
HTTP網絡通信協議在任何的開發工作中都起到非常重要的作用,今天,我們來講解下關於HTTP的相關知識。
目錄
5分鐘全面了解HTTP相關知識.png
計算機網絡相關知識
計算機網絡體系結構分為五層,自上而下分別是應用、運輸、網絡、數據鏈路和物理層,如下圖:
五層協議體系結構
HTTP存在於最高層的應用層,簡單介紹下應用層:
-
作用
通過應用層協議定義應用進程間(運行的程序)的通信規則應用層協議主要有HTTP、SMTP、FTP協議等等
-
交互的數據單元稱為報文
- 基本上是基於C/S方式
HTTP介紹
1. 定義
即HyperText Transfer Protocol,超文本傳輸協議,屬於應用層協議的一種
2. 作用
規定了應用進程間通信(請求&響應)的準則
3. 特點
- 無連接:HTTP本身是無連接的,即交換HTTP報文前不需要建立HTTP連接
- 無狀態:HTTP協議是無狀態的:數據傳輸過程中,並不保存任何歷史信息和狀態信息。無狀態特性簡化了服務器的設計,使服務器更容易支持大量並發的HTTP請求。
- 傳輸可靠性高:采用TCP作為運輸層協議(面向連接、可靠傳輸),即交換報文時需要預先建立TCP連接
- 兼容性好:支持B/S模式及C/S模式;
- 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST
- 靈活:HTTP 允許傳輸任意類型的數據對象
4. 工作方式
HTTP協議采用了請求/響應的工作方式,工作流程如圖:
index.png
5. HTTP報文詳解
HTTP的報文分為請求報文和響應報文
5.1 HTTP請求報文
HTTP請求報文的組成
HTTP請求報文組成.png
- 請求行:用於聲明”請求報文“、主機域名、資源路徑和協議版本
- 請求頭:說明客戶端、服務器或報文的部分信息
- 請求體:用於存放需要發送給服務器的數據信息
1. 請求行
- 組成
請求行的組成
空格不能省
- 組成介紹
1.1 請求方法
即對請求對象的操作,請求方法有8種:
方法類別 | 意義 |
---|---|
OPTION | 請求“選項”的信息 |
HEAD | 請求讀取”URL標誌信息的首部“信息 |
GET | 請求讀取“URL標誌的信息“的信息 |
POST | 為服務器添加信息 |
PUT | 為指定的URL下添加(存儲)一個文檔 |
DELETE | 刪除指定URL所標誌的信息 |
TRACE | 用於進行環回測試的請求報文 |
CONNECT | 用於代理服務器 |
最常用的就是GET和POST方法。
1.2 請求路徑
要了解請求地址,先來了解下URL概念:
- 定義:Uniform Resoure Locator,統一資源定位符,是一種自願位置的抽象唯一識別方法。
- 作用:用於表示資源位置和訪問這些資源的方法
- 組成:
<協議>://<主機>:<端口>/<路徑>- 協議:采用的應用層通信協議,比如在HTTP協議下的URL地址:
HTTP://<主機>:<端口>/<路徑> - 主機:請求資源所在主機的域名
- 端口和路徑有時可以省略(HTTP默認端口號是80)
- 協議:采用的應用層通信協議,比如在HTTP協議下的URL地址:
從上面可以了解到,路徑則是端口號後面符號”/“的部分,下面舉例
URL(統一資源定位符) | PATH(路徑) |
---|---|
http://www.baidu.com/ | / |
http://www.weibo.com/2874748/home | /2874748/home |
1.3 協議版本
HTTP協議版本主要是1.0、1.1、2.0
具體區別這裏不多解釋,大家有興趣可以去了解下
請求行舉例
先假設:
- URL地址為:http://www.tsinghua.edu.cn/chn/yxsz/index.htm
- 請求報文采用GET方法
- 請求報文采用HTTP1.1版本
則請求行是:GET /chn/yxsz/index.htm HTTP/1.1
2. 請求頭
- 作用:說明客戶端、服務器或報文的部分信息
- 使用方式:采用”header(字段名):value(值)“的方式
- 常用請求頭
1. 請求和響應報文的通用Header
請求和響應報文的通用Header
2. 常見請求Header
常見請求Header
- 舉例:
(URL地址:http://www.tsinghua.edu.cn/chn/yxsz/index.htm)
Host:www.tsinghua.edu.cn (表示主機域名)
User - Agent:Mozilla/5.0 (表示用戶代理是使用Netscape瀏覽器)
3. 請求體
- 作用:用於存放需要發送給服務器的數據信息
- 使用方式:目前來說,一共有三種
1. 數據交換格式
請求體是可以是任意類型的,但服務器需要額外進行解析,如JSON
{"skill":{
"web":[
{
"name":"html",
"year":"5"
},
{
"name":"ht",
"year":"4"
}],
"database":[
{
"name":"h",
"year":"2"
}]
`}}
想詳細了解Android開發中的JSON解析可以看下我寫的另外一篇文章:
Android開發:JSON簡介及最全面解析方法!
2.鍵值對形式
鍵與值之間用”=“連接,每個鍵值對間用&連接,且只能用ASCII字符,如Query String
key1=value1&key2&value2
3. 分部分形式
請求體被分為多個部分,應用場景是文件上傳,比如郵件上傳等等
- 每段以-- {boundary}開頭
- 然後是該段的描述頭
- 描述頭之後空一行接內容
- 每段以-- {boundary}--結束
如下:
分部分格式
請求報文實例
結合上述說的請求行、請求頭和請求體,現假設
- URL地址為:http://www.tsinghua.edu.cn/chn/yxsz/index.htm
- 請求報文采用GET方法
- 請求報文采用HTTP1.1版本
- 請求報文希望表明主機域名和用戶代理是使用Netscape瀏覽器
- 請求體采用鍵值對形式
則請求報文如下:
請求報文
5.2HTTP響應報文
HTTP響應報文的組成
HTTP響應報文組成.png
從上面可以看出,與請求報文相比,除了第一行(請求行VS狀態行)以外,響應報文的其他結構與請求報文非常相似。其中,響應體是用於存放需要返回給客戶端的數據信息的。
1. 狀態行
- 組成
狀態行組成
其中,空格不能省
1.1 協議版本
HTTP協議版本主要是1.0、1.1、2.0
具體區別這裏不多解釋,大家有興趣可以去了解下
1.2 狀態碼
狀態碼分為5大類:
類別 | 含義 |
---|---|
1xx | 表示信息通知,如請求收到了或正在進行處理 |
2xx | 表示成功,如接受或知道了 |
3xx | 表示重定向,如要完成請求還必須采取進一步行動 |
4xx | 客戶的差錯,如請求中有錯誤的語法或不能完成:404 |
5xx | 表示服務器的差錯,如服務器失效無法完成請求 |
1.3 狀態信息
對狀態碼的簡單解釋
具體詳細的狀態碼信息可以看狀態碼詳解
狀態行舉例
- HTTP/1.1 202 Accepted(接受)
- HTTP/1.1 301 Bad Request(永久性轉移)
- HTTP/1.1 404 Not Found(找不到)
2. 響應頭
- 作用:說明客戶端、服務器或報文的部分信息
- 使用方式:采用”header(字段名):value(值)“的方式
- 常用請求頭
1. 請求和響應報文的通用Header
請求和響應報文的通用Header
2. 常見響應Header
常見響應Header
3. 響應體
- 作用:用於存放需要返回給客戶端的數據信息
- 使用方式:和請求體是一致的,同樣分為:任意類型的數據交換格式、鍵值對形式和分部分形式,這裏不作過多描述。
你需要了解的HTTP知識都在這裏了!