更多資料請關注公眾號:Linux兵工廠
HTTP(Hypertext Transfer Protocol)是一種用于在計算機之間傳輸超文本的協(xié)議。它是構建在TCP/IP協(xié)議之上的應用層協(xié)議,被用于在Web瀏覽器和Web服務器之間傳遞信息。HTTP協(xié)議是一種無狀態(tài)、無連接的協(xié)議,它在每個請求和響應之間是獨立的,不保留先前的狀態(tài)信息。
1. 請求與響應
HTTP 協(xié)議的通信模型基于請求-響應的方式??蛻舳税l(fā)送一個請求給服務器,然后服務器返回一個響應。
請求(Request)
一個 HTTP 請求由客戶端發(fā)起,通常由一個請求行、請求頭部、空行和請求體組成。
請求行
請求行包含請求的方法、請求的URL和HTTP協(xié)議的版本。
GET /index.html HTTP/1.1
在這個例子中:
- GET: 請求方法,表示獲取指定資源。
- /index.html: 請求的資源路徑。
- HTTP/1.1: 使用的HTTP協(xié)議版本。
請求頭部
請求頭部包含關于請求的附加信息,例如客戶端類型、所支持的數(shù)據(jù)類型等。
Host: www.example.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
空行
空行表示請求頭部結束,后面的數(shù)據(jù)都是請求體。
請求體
請求體包含實際發(fā)送給服務器的數(shù)據(jù),比如 POST 請求中的表單數(shù)據(jù)。
username=johndoe&password=secret
響應(Response)
服務器接收到請求后,返回一個響應給客戶端。一個 HTTP 響應由一個狀態(tài)行、響應頭部、空行和響應體組成。
狀態(tài)行
狀態(tài)行包含HTTP協(xié)議的版本、一個狀態(tài)碼和相應的狀態(tài)消息。
HTTP/1.1 200 OK
在這個例子中:
- HTTP/1.1: 使用的HTTP協(xié)議版本。
- 200: 狀態(tài)碼,表示請求成功。
- OK: 狀態(tài)消息,提供關于狀態(tài)碼的簡短說明。
響應頭部
響應頭部包含關于響應的附加信息,例如服務器類型、響應的數(shù)據(jù)類型等。
Content-Type: text/htmlContent-Length: 1024
空行
空行表示響應頭部結束,后面的數(shù)據(jù)都是響應體。
響應體
響應體包含實際返回給客戶端的數(shù)據(jù),比如 HTML 內容。
<!DOCTYPE html><html><head> <title>Example Page</title></head><body> <h1>Hello, World!</h1></body></html>
2. HTTP 方法
HTTP 定義了一些常見的請求方法,每個方法表示一種對資源的操作。以下是一些常見的 HTTP 方法:
- GET: 請求獲取指定資源。
- POST: 提交數(shù)據(jù)進行處理,通常用于提交表單。
- PUT: 請求服務器存儲一個資源,通常要指定存儲的位置。
- DELETE: 請求服務器刪除指定資源。
- HEAD: 類似于 GET 請求,但服務器只返回頭部信息,不返回實際內容。
- OPTIONS: 請求獲取服務器支持的 HTTP 方法。
3. URL 結構
URL(Uniform Resource Locator)是用于標識互聯(lián)網(wǎng)上資源的地址。它包含了協(xié)議、主機、端口、路徑和查詢參數(shù)等信息。
http://www.example.com:80/index.html?name=john&age=25
- http: 協(xié)議。
- www.example.com: 主機名。
- 80: 端口號。
- /index.html: 路徑。
- ?name=john&age=25: 查詢參數(shù)。
4. 狀態(tài)碼
HTTP 響應狀態(tài)碼用于表示服務器對請求的處理結果。常見的狀態(tài)碼有:
- 2xx(成功): 表示請求被成功接收、理解、接受。
- 3xx(重定向): 要完成請求,需要進一步操作,通常用于重定向。
- 4xx(客戶端錯誤): 請求包含錯誤或無法完成,客戶端需要處理。
- 5xx(服務器錯誤): 服務器在處理請求的過程中發(fā)生錯誤。
例如,常見的狀態(tài)碼:
-
200 OK: 請求成功。
-
201 Created: 請求已經(jīng)被實現(xiàn),而且有一個新的資源已經(jīng)依據(jù)請求的需要而建立。
-
204 No Content: 服務器成功處理了請求,但不需要返回任何實體內容。
-
301 Moved Permanently: 被請求的資源已永久移動到新位置。
-
302 Found: 請求的資源現(xiàn)在臨時從不同的 URI 響應請求。
-
304 Not Modified: 自從上次請求后,請求的網(wǎng)頁未修改過。
-
400 Bad Request: 服務器無法理解該請求。
-
401 Unauthorized: 請求要求身份驗證。
-
403 Forbidden: 服務器理解請求,但拒絕執(zhí)行。
-
500 Internal Server Error: 服務器遇到了一個未曾預料的狀況,無法完成對請求的處理。
5. 報文頭部
HTTP 報文頭部包含了請求和響應的元信息,提供有關報文主體、服務器和客戶端信息的信息。
常見的請求頭部:
- Host: 指定請求資源所在的服務器。
- User-Agent: 發(fā)起請求的用戶代理,通常是瀏覽器。
- Accept: 客戶端能夠處理的媒體類型。
常見的響應頭
部:
- Content-Type: 返回的數(shù)據(jù)類型,例如 text/html、application/json。
- Content-Length: 返回的數(shù)據(jù)長度。
- Server: 服務器信息。
6. 報文體
HTTP 報文體包含實際的數(shù)據(jù),對于請求報文,報文體可能包含用戶提交的表單數(shù)據(jù)等信息;對于響應報文,報文體包含了服務器返回的實際數(shù)據(jù),比如 HTML 內容。
結語
HTTP 協(xié)議是 Web 世界的基石,了解其基本原理對于 Web 開發(fā)者至關重要。本文介紹了 HTTP 的基本請求和響應結構、常見的請求方法、URL 結構、狀態(tài)碼、報文頭部和報文體等基本概念。深入理解這些基礎概念,將有助于更好地理解 Web 應用的運作原理。