HTTP 請求

weixin_33762321發表於2016-07-17

HTTP 原理

HTTP 是應用層協議,通過 TCP 實現可靠傳輸,能夠保證資料的完整性、正確性。

C/S 架構的互動流程

  1. 客戶端執行網路請求,從 URL 解析服務端的主機名
  2. 主機名解析成 IP 地址
  3. 從 URL 解析出埠號
  4. 建立客戶端到服務端的 TCP 連線
  5. 客戶端通過輸出流向服務端傳送一條 HTTP 請求
  6. 服務端向客戶端回送一條 HTTP 響應報文
  7. 客戶端從輸入流獲取報文
  8. 客戶端解析報文,關閉連線
  9. 客戶端將結果顯示在 UI

HTTP 請求方式

HTTP 常見請求方式有 GET、POST、DELETE、PUT、HEAD、TRACE、OPTIONS。

GET

用來獲取伺服器中的某個資源

POST

用來向伺服器傳遞資料,比如遞交 HTML 表單

PUT

用來向伺服器寫入資源。有些釋出系統允許使用者建立 Web 頁面,並用 PUT 直接將其傳輸到 Web 伺服器上

DELETE

用來請伺服器刪除 URL 所指定的資源。但是,客戶端應用程式無法保證刪除操作一定會被執行。因為,HTTP 規範允許伺服器在不通知客戶端的情況下撤銷請求

HEAD

與 GET 方法行為型別,但是伺服器在響應中只返回首部。不會返回實體的主體部分。這就允許客戶端在未獲取實際資源的情況下,對資源的首部進行檢查。

TRACE

TRACE 方法允許客戶端在最終將請求傳送給伺服器時,看看它變成什麼樣子。TRACE 請求會在目的伺服器端發起一個“環回”診斷。行程最後一站的伺服器會彈回一條 TRACE 響應,並在響應主體中攜帶它收到的原始請求報文。這樣客戶端就可以檢視在所有中間 HTTP 應用程式組成的請求/響應鏈上,原始報文是否以及如何被毀壞或修改過。

OPTIONS

OPTIONS 方法請求 Web 伺服器告知其支援的各種功能。可以詢問伺服器通常支援哪些方法,或者對某些特殊資源支援哪些方法(有些伺服器可能只支援對一些特殊型別物件使用特定的操作)。這為客戶端應用程式提供了一種手段,使其不用實際訪問那些資源就能判定訪問各種資源的最優方式。

HTTP 報文格式解析

HTTP 請求報文由請求行(request line)、請求頭部(header)、空行和請求資料 4 個部分組成。

|請求方法 | 空格 | URL | 空格 | HTTP 版本 | 回車符 | 換行符 |
| ----------頭部欄位名:值 --------- | 回車符 | 換行符 |
|------回車符 -----------|------- 換行符---------- |
|-------------------請求資料-------------------- |

1.起始行
報文的第一行就是起始行,在請求報文中用來說明要以什麼方式做什麼請求,而在響應報文中粗略說明了報文的執行結果。

2.首部欄位
起始行後面有零個或者多個首部欄位。每個首部欄位都包含一個名字和一個值,為了便於解析,兩者之間用冒號(如 Connection:Keep-Alive)來分隔。首部以一個空行結束。新增一個首部欄位和新增新行一樣簡單。

3.主體
首部欄位的空行之後就是可選的報文主體,其中包含了所有型別的資料。請求主體中包括了要發給 Web 伺服器的資料;響應主體中裝載了要返回給客戶端的資料。起始行和首部都是結構化的文字形式,而主體可以包含任意的二進位制資料(如圖片、視訊、音軌、軟體程式)。當然,主體中也可以包含文字。

響應報文

HTTP 響應也由 3 個部分組成,分別是:狀態行、訊息報頭、響應正文。

<狀態行>
<響應報文 header>
<空行>
[響應報文內容]

在響應中唯一真正的區別在於第一行中用狀態資訊代替了請求資訊。狀態行(status line)通過提供一個狀態碼來說明請求的資源情況。

狀態行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version 表示伺服器 HTTP 協議的版本;Status-Code 表示伺服器發回的響應狀態程式碼;Reason-Phrase 表示狀態程式碼的文字描述。狀態程式碼由 3 位數字組成,第一個數字定義了響應的類別,有 5 中可能取值。

取值範圍 含義
100-199 指示資訊-表示請求已經接收,繼續處理
200-299 請求成功。表示請求已經被成功接收、理解
300-399 重定向。要完成請求必須做進一步操作
400-499 客戶端錯誤。請求有語法錯誤或請求無法實現
500-599 伺服器端錯誤。伺服器未能實現合法請求

常見狀態程式碼

程式碼 狀態 說明
200 OK 客戶端請求成功
400 Bad Request 客戶端請求有語法錯誤,不能被伺服器所理解
401 Unauthorized 請求未經授權
403 Forbidden 伺服器收到請求,但是拒絕提供服務
404 Not Found 請求資源不存在
500 Internal Server Error 伺服器發生不可預期錯誤
503 Server Unavailable 伺服器當前不能處理客戶端的請求

相關文章