1. 程式人生 > >你需要了解的HTTP知識都在這裏了!

你需要了解的HTTP知識都在這裏了!

gem agent pre 基本 語法 lan 重要 詳細 thead

前言

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,統一資源定位符,是一種自願位置的抽象唯一識別方法。
  • 作用:用於表示資源位置和訪問這些資源的方法
  • 組成:
    <協議>://<主機>:<端口>/<路徑>
    1. 協議:采用的應用層通信協議,比如在HTTP協議下的URL地址:
      HTTP://<主機>:<端口>/<路徑>
    2. 主機:請求資源所在主機的域名
    3. 端口和路徑有時可以省略(HTTP默認端口號是80)

從上面可以了解到,路徑則是端口號後面符號”/“的部分,下面舉例

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知識都在這裏了!