HTTP 請求
HTTP 原理
HTTP 是應用層協議,通過 TCP 實現可靠傳輸,能夠保證資料的完整性、正確性。
C/S 架構的互動流程
- 客戶端執行網路請求,從 URL 解析服務端的主機名
- 主機名解析成 IP 地址
- 從 URL 解析出埠號
- 建立客戶端到服務端的 TCP 連線
- 客戶端通過輸出流向服務端傳送一條 HTTP 請求
- 服務端向客戶端回送一條 HTTP 響應報文
- 客戶端從輸入流獲取報文
- 客戶端解析報文,關閉連線
- 客戶端將結果顯示在 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 | 伺服器當前不能處理客戶端的請求 |
相關文章
- http請求HTTP
- http請求概述HTTP
- HTTP請求方法HTTP
- http請求頭HTTP
- go http請求GoHTTP
- 合併HTTP請求vs並行HTTP請求,到底誰更快?HTTP並行
- 合併HTTP請求 vs 並行HTTP請求,到底誰更快?HTTP並行
- Cookie 與 HTTP請求CookieHTTP
- Jsoup http請求JSHTTP
- Android Http請求AndroidHTTP
- HTTP請求報文HTTP
- 【轉】怎麼用PHP傳送HTTP請求(POST請求、GET請求)?PHPHTTP
- HTTP的請求過程HTTP
- python做http請求PythonHTTP
- Http請求資料格式HTTP
- HTTP GET請求傳bodyHTTP
- golang 的 http 請求池GolangHTTP
- HTTP 請求與響應HTTP
- Java實現Http請求JavaHTTP
- go http請求流程分析GoHTTP
- 七種HTTP請求方法HTTP
- Http請求體詳解HTTP
- HTTP網路請求原理HTTP
- HTTP請求預設值HTTP
- Http請求相關(轉)HTTP
- 我知道的HTTP請求HTTP
- python http OPTIONS請求PythonHTTP
- Http請求與響應HTTP
- AJAX 跨源 HTTP 請求HTTP
- .NET處理HTTP請求HTTP
- SOCKET模擬HTTP請求HTTP
- perl傳送http請求HTTP
- go搞笑http請求庫GoHTTP
- java傳送http請求JavaHTTP
- Android Http請求框架一:Get 和 Post 請求AndroidHTTP框架
- HTTP請求格式和HTTP響應格式HTTP
- Android Http請求框架二:xUtils 框架網路請求AndroidHTTP框架
- [前端 · 面試 ]HTTP 總結(三)—— HTTP 請求方法前端面試HTTP