目錄
HTTP基本概念
HTTP優缺點
HTTP優點(1.1)
HTTP缺點?
HTTP與HTTPS?
HTTP 與 HTTPS 的區別
HTTPS 解決 HTTP 的哪些安全問題?
HTTPS 如何解決安全問題?
HTTPS 連接建立的過程:
HTTP/1.1、HTTP/2、HTTP/3 演變
HTTP/1.1 相比 HTTP/1.0 的性能提升
HTTP/2 相比 HTTP/1.1 的性能改進
HTTP/2 的缺陷與 HTTP/3 的優化
總結
HTTP其他重要知識點
HTTP狀態碼
HTTP常見字段
HTTP 中的GET和POST的概念和區別
HTTP基本概念
HTTP,全稱為超文本傳輸協議(HyperText Transfer Protocol),是網絡通信的核心協議之一。它由三個關鍵概念組成:
- 超文本(HyperText):指的是可以包含圖片、視頻和鏈接等多媒體元素的文本,這些元素可以鏈接到其他文檔或資源。
- 傳輸(Transfer):指的是數據在網絡中的發送和接收過程,無論是從服務器到客戶端,還是反過來。
- 協議(Protocol):定義了數據傳輸的規則和標準,確保不同計算機系統之間的通信能夠順利進行。
HTTP作為一種網絡協議,為計算機世界提供了一種標準化的通信方式。它規定了客戶端和服務器之間如何請求和交換超文本信息,包括各種控制指令和錯誤處理機制。
“傳輸”在HTTP中指的是數據在網絡中的移動,這不僅是簡單的數據遷移,還涉及到確保數據完整性和順序的復雜過程。HTTP通過定義請求和響應的格式,以及狀態碼等機制,確保了數據能夠在網絡中的兩點之間可靠地傳輸。
簡而言之,HTTP是網絡中數據傳輸的規則和規范,它使得不同計算機系統能夠高效、準確地交換超文本信息。
HTTP優缺點
HTTP優點(1.1)
HTTP以其簡潔性、靈活性、可擴展性、廣泛的應用和跨平臺特性而著稱:
-
簡潔性:HTTP的報文結構直觀,由頭部(header)和主體(body)組成,頭部信息采用易于理解的鍵值對文本格式,這降低了學習和使用的難度。
-
靈活性和可擴展性:HTTP協議的設計允許開發者對請求方法、URI/URL、狀態碼和頭部字段等進行自定義和擴展,提供了高度的靈活性。此外,由于HTTP工作在應用層,其下層技術可以自由變化,如HTTPS在HTTP與TCP之間增加了SSL/TLS層,而HTTP/3則采用了基于UDP的QUIC協議。
-
廣泛應用和跨平臺性:隨著互聯網的發展,HTTP已成為網絡通信的基石,其應用場景從桌面瀏覽器到移動應用,涵蓋了新聞閱讀、社交媒體、在線購物、金融管理、在線游戲等多種服務。HTTP的跨平臺特性意味著它能夠在各種設備和操作系統上無縫工作,這進一步擴大了其應用范圍。
HTTP缺點?
無狀態特性的雙刃劍
- 優勢在于減輕服務器負擔,因為服務器無需存儲會話狀態,可以更高效地分配資源。
- 劣勢在于執行一系列相關操作(如用戶登錄、購物、結算等)時,由于服務器無法識別這些操作的關聯性,每次都需要重新驗證用戶身份,這可能導致用戶體驗下降。
明文傳輸的雙刃劍
- 優勢是便于調試,因為信息以明文形式傳輸,易于通過工具如瀏覽器控制臺或Wireshark進行查看。
- 劣勢是信息安全風險高,因為傳輸過程中的數據容易被截獲和竊取,尤其是敏感信息如賬號密碼,可能導致用戶信息泄露。
安全性不足
- HTTP不加密,通信內容可能被竊聽,增加了賬號信息泄露的風險。
- 不驗證通信方身份,容易受到偽裝攻擊,如訪問假冒網站,可能導致財產損失。
- 無法保證報文的完整性,可能遭受篡改,如網頁被植入惡意廣告。
HTTP與HTTPS?
HTTP 與 HTTPS 的區別
安全性差異
-
? ?HTTP(超文本傳輸協議)是一種明文傳輸協議,通信內容容易受到竊聽、篡改和偽造。?
-
? ?HTTPS(安全超文本傳輸協議)在 HTTP 基礎上加入了 SSL/TLS 協議,確保數據傳輸的安全性。SSL/TLS 協議通過加密通信內容,解決了 HTTP 的安全缺陷。
連接建立過程
-
? ?HTTP?連接相對簡單,基于 TCP 三次握手完成后即可開始數據傳輸。
-
? ?HTTPS?除了 TCP 三次握手外,還需要額外的 SSL/TLS 握手過程,確保安全的加密通信。
端口號
-
? ?HTTP?默認使用端口號 80。
-
? ?HTTPS?默認使用端口號 443。
證書認證
- HTTPS 需要向 CA(證書頒發機構)申請并安裝數字證書,驗證服務器的身份,確保通信對象的可信度。
HTTPS 解決 HTTP 的哪些安全問題?
由于 HTTP 傳輸是明文的,因此存在以下幾種主要安全風險:
-
竊聽風險:通信內容可能被第三方截獲。
-
篡改風險:數據傳輸過程中可能被篡改,導致信息不一致。
-
偽裝風險:攻擊者可能偽造網站,誘導用戶輸入敏感信息。
HTTPS 通過 SSL/TLS 協議解決這些問題:
-
信息加密:使用加密算法保證通信內容在傳輸過程中的機密性,防止被竊聽。
-
數據完整性校驗:通過摘要算法(如哈希)生成數據的唯一指紋,確保數據未被篡改。
-
身份驗證:通過數字證書驗證服務器身份,防止偽裝攻擊。
HTTPS 如何解決安全問題?
-
防止竊聽:HTTPS 使用混合加密方式,即對稱加密和非對稱加密結合,確保信息在傳輸過程中加密,防止第三方監聽。
-
防止篡改:使用消息摘要算法(如哈希算法),生成數據的獨特“指紋”,驗證數據完整性。如果數據被篡改,接收方會檢測到。
-
防止偽裝:服務器通過數字證書提供公鑰,客戶端通過 CA 機構驗證證書,確保服務器的身份真實可信,避免中間人攻擊。
HTTPS 連接建立的過程:
HTTPS 使用 SSL/TLS 協議建立加密連接。整個過程涉及四次信息交互,確保通信的機密性、完整性與身份驗證。具體流程如下:
1.ClientHello:客戶端向服務器發起加密通信請求,發送以下信息:
- ? ?支持的 SSL/TLS 協議版本(如 TLS 1.2)。
- ? ?客戶端生成的隨機數(用于生成會話秘鑰)。
- ? ?支持的加密套件列表(如 RSA 加密算法)。
2.ServerHello:服務器響應客戶端請求,發送以下信息:
- ? ?確認 SSL/TLS 協議版本,若瀏覽器不支持則關閉連接。
- ? ?服務器生成的隨機數(用于生成會話秘鑰)。
- ? ?確定使用的加密套件。
- ? ?服務器的數字證書(包含公鑰)。
3. 客戶端響應:客戶端通過 CA 的公鑰驗證服務器證書,并使用服務器公鑰加密以下內容:
- ? ??生成的隨機數(pre-master key)。
- ? ??加密通信算法改變通知,指示后續通信使用會話秘鑰加密。
- ? ??客戶端握手結束通知,并將前述數據摘要發送給服務器。
4. 服務器響應:服務器收到客戶端的 pre-master key 后,通過協商的加密算法計算會話秘鑰。然后,發送以下信息:
- ? ?加密通信算法改變通知。
- ? ?服務器握手結束通知,并將數據摘要發送給客戶端進行驗證。
至此,SSL/TLS 握手完成,客戶端與服務器可以開始使用會話秘鑰加密的通信。
HTTP/1.1、HTTP/2、HTTP/3 演變
HTTP/1.1 相比 HTTP/1.0 的性能提升
HTTP/1.1 相比于 HTTP/1.0 進行了多項性能改進,主要包括:
TCP 長連接
- HTTP/1.0 是基于短連接的,每次請求都需要建立和關閉一個新的 TCP 連接,這會帶來較大的性能開銷。
- HTTP/1.1 引入了 TCP 長連接,即一個 TCP 連接可以復用多個 HTTP 請求和響應,避免了重復的連接建立與關閉,顯著減少了延遲和開銷。
管道化(Pipelining)
- HTTP/1.1 支持管道化傳輸,即客戶端可以在等待第一個請求的響應時繼續發送后續請求,而不要等待每個請求的回應。這種方式降低了整體響應時間,提升了請求的處理效率。
盡管如此,HTTP/1.1 仍然存在一些性能瓶頸,主要包括
- 頭部未壓縮:HTTP/1.1 中的請求和響應頭信息未經過壓縮,頭部信息過多時會增加延遲。
- 冗長的頭部信息:每次請求都需要發送相同的頭部信息,造成不必要的數據傳輸浪費。
- 隊頭阻塞:由于 HTTP/1.1 中的請求是按順序處理的,如果服務器響應慢,后續請求會被阻塞,導致延遲。
- 缺乏請求優先級控制:無法靈活控制哪些請求應優先響應,容易影響性能。
- 請求發起方向限制:HTTP/1.1 仍然只能由客戶端發起請求,服務器只能被動響應。
HTTP/2 相比 HTTP/1.1 的性能改進
HTTP/2 引入了一系列創新的技術,解決了 HTTP/1.1 中的多項性能瓶頸:
頭部壓縮
- HTTP/2 使用 HPACK算法對頭部信息進行壓縮,尤其是當多個請求包含相同或相似的頭部時,協議會去除重復的部分,減少了傳輸的冗余。
- 客戶端和服務器維護一張頭部表,使用索引來標識已經發送過的頭部字段,避免重復傳輸相同數據,顯著提高了效率。
二進制格式
- HTTP/2 改用 二進制格式,將請求和響應的頭部與數據體都封裝為二進制幀(frame),而不是像 HTTP/1.1 那樣使用純文本格式。
- 二進制格式更加高效,計算機可以直接解析,而不需要額外的文本解析步驟,提升了數據傳輸速度。
多路復用(Multiplexing)
- HTTP/2 支持 多路復用,即在一個 TCP 連接中并發處理多個請求和響應,而不必按順序逐個處理。這樣避免了 HTTP/1.1 中的 隊頭阻塞(Head-of-line blocking)問題,大幅度提高了連接的效率。
流控制和優先級
- HTTP/2 允許客戶端指定請求的優先級,服務器可以根據優先級響應高優先級的請求,減少延遲。通過流控制,HTTP/2 能在同一連接中根據網絡情況靈活地管理數據流,確保高效的數據傳輸。
服務器推送(Server Push)
- HTTP/2 引入了 服務器推送機制,服務器可以主動推送客戶端可能需要的資源(如 JS、CSS 文件),即便客戶端未明確請求。
HTTP/2 的缺陷與 HTTP/3 的優化
盡管 HTTP/2 在性能上有顯著提升,但它仍然存在一些問題,主要與底層的 TCP 協議有關:
- 丟包問題:在 HTTP/2 中,多個請求共享一個 TCP 連接,如果出現丟包,整個連接中的所有請求都會受到影響,導致延遲。
- 請求阻塞:盡管 HTTP/2 可以同時發送多個請求,但如果一個請求發生丟包,仍然會導致其他請求的阻塞,這個問題與 TCP 協議本身的流量控制機制密切相關。
為了解決 HTTP/2 中的這些問題,HTTP/3 引入了新的協議設計,主要變化包括:
基于 QUIC 協議
- HTTP/3 底層使用了 QUIC(Quick UDP Internet Connections)協議,替代了傳統的 TCP 協議。QUIC 是基于UDP的協議,UDP 本身沒有隊頭阻塞的問題,因此不會因為丟包導致整個連接的阻塞。
- QUIC 實現了類似于 TCP 的可靠性,但比 TCP 更高效,因為它減少了連接建立的延遲,并且能夠更靈活地處理丟包問題。
減少握手次數
- HTTP/3 將 TCP 握手和 TLS 握手?的過程合并,減少了傳統 6 次交互(3 次 TCP 握手 + 3 次 TLS 握手)為 3 次,顯著降低了建立連接的延遲。
改進的頭部壓縮
- HTTP/3 使用 QPack頭部壓縮算法,相較于 HTTP/2 的 HPACK,QPack 進一步優化了頭部壓縮的效率。
流的獨立性
- 由于 QUIC 允許每個流獨立于其他流進行傳輸,HTTP/3 可以在流之間靈活處理丟包,確保不會因為某個流的丟包影響到其他流。
總結
- HTTP/1.1?相較于 HTTP/1.0 引入了 TCP 長連接和管道化技術,有效減少了連接建立的開銷,提升了傳輸效率,但仍然面臨頭部壓縮不足、隊頭阻塞等瓶頸。
- HTTP/2在此基礎上進一步改進了性能,主要通過頭部壓縮、二進制格式、多路復用、服務器推送等技術提升了響應速度,并解決了隊頭阻塞問題。
- HTTP/3?則通過基于 QUIC 協議,改用 UDP 解決了 HTTP/2 的丟包和隊頭阻塞問題,進一步優化了連接的效率和可靠性。
HTTP其他重要知識點
HTTP狀態碼
常見的HTTP狀態碼分為五大類,每個狀態碼由三位數字組成,第一位數字表示類別:?
1xx:信息響應
-
100 Continue:服務器已接收請求的初步部分,客戶端應繼續請求。
-
101 Switching Protocols:服務器同意切換協議,如從HTTP切換到WebSocket。
2xx:成功
-
200 OK:請求成功,服務器返回所請求的資源或數據。
-
201 Created:請求成功并創建了新的資源,常用于POST請求。
-
204 No Content:請求成功但服務器不返回任何內容,常用于刪除操作。
3xx:重定向
-
301 Moved Permanently:資源已永久移動到新的URL,客戶端應使用新URL訪問。
-
302 Found:資源臨時移動到新的URL,客戶端應繼續使用原來的URL。
-
304 Not Modified:資源未修改,客戶端可以使用緩存版本。
4xx:客戶端錯誤
-
400 Bad Request:請求無效或語法錯誤,服務器無法處理。
-
401 Unauthorized:請求需要身份驗證,客戶端未提供有效的憑證。
-
403 Forbidden:服務器理解請求但拒絕執行,通常是權限問題。
-
404 Not Found:請求的資源在服務器上未找到。
5xx:服務器錯誤
-
500 Internal Server Error:服務器內部錯誤,無法完成請求。
-
502 Bad Gateway:服務器作為網關或代理,從上游服務器接收到無效響應。
-
503 Service Unavailable:服務器暫時無法處理請求,通常是因為過載或維護。
HTTP常見字段
Host?字段:客戶端發送請求時,?來指定服務器的域名。
Content-Length 字段:服務器在返回數據時,會有 Content-Length 字段,表明本次回應的數據?度。
Connection 字段:Connection 字段最常?于客戶端要求服務器使? TCP 持久連接,以便其他請求復?。
Content-Type 字段:?Content-Type 字段?于服務器回應時,告訴客戶端,本次數據是什么格式。
Content-Encoding 字段:?Content-Encoding 字段說明數據的壓縮?法。表示服務器返回的數據使?了什么壓縮格式。
HTTP 中的GET和POST的概念和區別
概念
GET:用于獲取資源,通常用于請求數據而不改變服務器狀態。
POST:用于提交數據到服務器,通常會改變服務器的狀態或產生副作用(如創建或更新資源)。
區別?
參數傳遞方式
GET:參數通過URL拼接傳遞,暴露在請求URL中,具有可見性,長度有限(取決于瀏覽器和服務器)。
POST:參數放在請求體中,通常不可見且長度理論上沒有限制,更適合傳遞大量數據或敏感信息。
安全性
GET:參數可見,數據容易暴露在瀏覽器歷史記錄、日志和緩存中,不適合傳遞敏感信息。
POST:數據放在請求體中,相對安全,但需要HTTPS才能保證數據加密傳輸。
冪等性
GET:冪等(重復請求不會改變服務器狀態)。
POST:非冪等(多次請求可能導致重復創建資源或執行多次相同操作)。
HTTPS
?HTTP 與 HTTPSHTTP 與 HT?