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