Java中的 HTTP 協議原理詳解
前言
HTTP(Hyper Text Transfer Protocol)超文本傳輸協議,下文簡稱 HTTP,它的作用是用於實現服務器端和客戶端的數據傳輸的。它可以傳輸任意的數據類型,如文本、HTML、圖片、文件、聲音等類型。 簡單來說,HTTP 的作用就像一個“快遞”一樣,用來承載客戶端(瀏覽器)和服務器端的數據傳輸,
如下圖所示:
1.HTTP 特點
HTTP 的主要特點有以下 5 個:
- 簡單快速:客戶端向服務器端發送請求時,隻需傳遞請求方法、路徑和請求參數,因為協議簡單,所以使得 HTTP 服務器的程序規模小,因而通信速度很快。
- 無連接:所謂的無連接指的是,每次連接隻處理一個請求。服務器處理完客戶的請求後,會立即斷開連接。
- 無狀態:HTTP 不會記錄每次請求的身份信息,因此前一次請求和後一次請求相互“不認識”。
- 可傳遞任意數據類型:HTTP 允許傳輸任意數據類型,隻需要在請求頭中標識數據類型 Content-Type 即可。
一對一通訊:每次 HTTP 請求,都是一個客戶端對應一個服務器端。
2.HTTP 組成
HTTP 是由以下 2 部分組成的:
- 請求對象 Request(客戶端請求)。
- 響應對象 Response(服務器響應)。
每次 HTTP 請求都是由一次請求和一次響應構成的,如下圖所示:
2.1 請求對象
請求對象包含 4 部分內容:
- 請求行
- 請求報頭
- 空行
- 請求正文
如下圖所示:
2.1.1 請求行
請求行包含瞭以下 3 部分內容:
- 請求類型 Method,如 GET。
- 請求的 URL 地址,
- HTTP 版本號,如 HTTP/1.1。
其中,所有的請求類型如下:
2.1.2 請求報頭
請求報頭是在發送請求時,描述更多的請求信息的,它以 "name: value" 的形式存在的,每個請求報頭占一行。 常見的請求報頭有以下幾個:
- Host:表示服務器端的地址和端口號。
- Content-Type:用於描述請求正文中的數據類型,常見的類型有:json 格式的 application/json、表單格式的 application/x-www-form-urlencoded、文件格式的 multipart/form-data 等。
- Content-Length:用於描述請求正文中的數據長度,需要註意的是,這裡的數據長度統計單位為字節而非字符。
- User-Agent:用戶代理信息,比如訪問用戶的系統信息,瀏覽器類型和版本信息等。
2.1.3 空行
一個沒有任何內容的空行,用於分隔請求報頭和請求正文的特殊組成部分。
2.1.4 請求正文
業務系統中要傳遞參數。
2.2 響應對象
響應對象也是由 4 部分內容組成的:
- 狀態行
- 響應報頭
- 空行
- 響應正文
如下圖所示:
2.2.1 狀態行
狀態行用於描述服務器的返回狀態,它由 3 部分組成:
- HTTP 版本號,如 HTTP/1.1。
- 狀態碼,如 200。
- 狀態描述信息,如 OK。
常見的狀態碼有以下幾個:
- 200:返回成功。
- 301:永久重定向。
- 302:臨時重定向。
- 404:未找到頁面。
- 500:服務器程序出錯。
2.2.2 響應報頭
響應報頭和請求報頭類似,也是以 "name: value" 的形式存在的,每個報頭占一行。 常見的報頭有 Content-Type,它是用於描述響應正文的數據類型的,常見的數據類型有:json 格式的 application/json 和 HTML 格式的 text/html。
2.2.3 空行
一個沒有任何內容的空行,用於分隔狀態行和響應正文的特殊組成部分。
2.2.4 響應正文
返回給客戶端的所有數據。
總結
HTTP 超文本傳輸協議,用於實現服務器端和客戶端的數據傳輸。它的特點是簡單快速、無連接、無狀態、可傳遞任意數據類型和一對一通訊。HTTP 協議由兩部分組成:請求對象 Request 和響應對象 Response。
到此這篇關於Java中的 HTTP 協議原理詳解的文章就介紹到這瞭,更多相關Java HTTP 協議內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 使用flask如何獲取post請求參數
- php使用file_get_contents(‘php://input‘)和$_POST的區別實例對比
- 使用Spring處理x-www-form-urlencoded方式
- 詳細講解HTTP協議工作方式
- 對Golang中的FORM相關字段理解