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

前言

HTTP網絡通訊協議在任何的開發工做中都起到很是重要的做用,今天,咱們來說解下關於HTTP的相關知識。html


目錄


5分鐘全面瞭解HTTP相關知識.png

計算機網絡相關知識

計算機網絡體系結構分爲五層,自上而下分別是應用、運輸、網絡、數據鏈路和物理層,以下圖:web


五層協議體系結構

HTTP存在於最高層的應用層,簡單介紹下應用層:瀏覽器

  • 做用
    經過應用層協議定義應用進程間(運行的程序)的通訊規則服務器

    應用層協議主要有HTTP、SMTP、FTP協議等等網絡

  • 交互的數據單元稱爲報文併發

  • 基本上是基於C/S方式

HTTP介紹

1. 定義

即HyperText Transfer Protocol,超文本傳輸協議,屬於應用層協議的一種測試

2. 做用

規定了應用進程間通訊(請求&響應)的準則.net

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.一、2.0

具體區別這裏很少解釋,你們有興趣能夠去了解下

請求行舉例

先假設:

2. 請求頭
  • 做用:說明客戶端、服務器或報文的部分信息
  • 使用方式:採用」header(字段名):value(值)「的方式
  • 經常使用請求頭
    1. 請求和響應報文的通用Header

請求和響應報文的通用Header

2. 常見請求Header


常見請求Header
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.一、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. 響應體
  • 做用:用於存放須要返回給客戶端的數據信息
  • 使用方式:和請求體是一致的,一樣分爲:任意類型的數據交換格式、鍵值對形式和分部分形式,這裏不做過多描述。
相關文章
相關標籤/搜索