面試突擊64:瞭解 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 地址,如 https://www.baidu.com。
- 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面試真題解析
- 面試官:什麼是雙親委派模型?
- 面試官:熔斷和降級有什麼區別?
- 寬表為什麼橫行?
- 有沒有完全自主的國產化資料庫技術
- 面試突擊64:瞭解 HTTP 協議嗎?
- 面試突擊80:說一下 Spring 中 Bean 的生命週期?
- 面試突擊89:事務隔離級別和傳播機制有什麼區別?
- 面試突擊82:SpringBoot 中如何操作事務?
- 面試突擊87:說一下 Spring 事務傳播機制?
- 面試突擊81:什麼是跨域問題?如何解決?
- 面試突擊71:GET 和 POST 有什麼區別?
- 面試突擊70:什麼是粘包和半包?怎麼解決?
- 面試突擊68:為什麼 TCP 需要 3 次握手?
- 面試突擊66:請求轉發和請求重定向有什麼區別?
- 面試突擊63:MySQL 中如何去重?
- 面試突擊65:為什麼要用HTTPS?它有什麼優點?
- 面試突擊62:group by 有哪些注意事項?
- 面試突擊53:常見的 HTTP 狀態碼有哪些?
- 面試突擊61:說一下MySQL事務隔離級別?
- 面試突擊52:什麼是三正規化?它有什麼用?