全網最強的 HTTP 協議講解

寫在最前

超文本傳輸協議(Hyper Text Transfer Protocol,HTTP)是一個簡單的請求 - 響應協議,它是基於 TCP 協議的應用層傳輸協議。它指定了客戶端可能發送給服務器什麼樣的消息以及得到什麼樣的響應。

HTTP 是一種無狀態 (stateless) 協議, HTTP 協議本身不會對發送過的請求和響應的通信狀態進行持久化處理。這樣做的目的是爲了保持 HTTP 協議的簡單性,從而能夠快速處理大量的事務,提高效率。

HTTP 請求體

HTTP 請求體是請求數據時發送給服務器的數據,畢竟向服務器拿數據,先要表明怎麼要,以及要什麼!

HTTP 請求體由:請求行 、請求頭、請求體組成。

常用的 HTTP Method

Post 請求示例

# Method URL Version  請求行
POST /httpLearn/postRequest HTTP/1.1
# Request Header  請求頭
Host: 127.0.0.1:8080
User-Agent: apifox/1.0.0 (https://www.apifox.cn)
Content-Length: 126
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

# Request Message  請求體
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; 

post
----WebKitFormBoundary7MA4YWxkTrZu0gW

Get 請求示例

Get 請求沒有請求體

# Method URL Version  請求行
GET /httpLearn/getRequest?param=123 HTTP/1.1
# Request Header  請求頭
Host: 127.0.0.1:8080
User-Agent: apifox/1.0.0 (https://www.apifox.cn)

GET 與 POST 的區別

GET 與 POST 是我們常用的兩種 HTTP Method,二者之間的區別主要包括如下五個方面:

Http 響應報文

HTTP 的響應報文是服務器返回的數據,必須先有請求體再有響應報文。

HTTP 響應報文由:狀態行、響應頭、響應體組成。

常見 Response Code 分類

響應示例

# Version  Response Code  狀態行
HTTP/1.1 200 OK
# Response Header  響應頭
Content-Type:text/plain;charset=UTF-8
Content-Length:31
Date:Wed, 19 Jan 2022 11:37:00 GMT
Keep-Alive:timeout=60
Connection:keep-alive

# Response Message  響應體
post request is ok,param = post

一次完整 HTTP 請求所經歷的步驟

當我們在 web 瀏覽器的地址欄中輸入:www.baidu.com,然後回車,到底發生了什麼?

Https

HTTP 協議運行在 TCP 之上,明文傳輸,客戶端與服務器端都無法驗證對方的身份。Https 是通過 SSL(Secure Socket Layer, 安全套接層 ) 或 TLS(Transport Layer Security, 安全層傳輸協議) 的組合使用,加密 HTTP 的通信內容。屬於通信加密,即在整個通信線路中加密。

HTTPS 採用共享密鑰加密(對稱)和公開密鑰加密(非對稱)兩者並用的混合加密機制。若密鑰能夠實現安全交換, 那麼有可能會考慮僅使用公開密鑰加密來通信。但是公開密鑰加密與共享密鑰加密相比, 其處理速度要慢。

HTTP 的不足

兩者區別

HTTPS 工作原理

【1】客戶端發起 HTTPS 請求

用戶在瀏覽器裏輸入一個 https 網址,然後連接到 server 的 443 端口。

【2】服務端的配置

採用 HTTPS 協議的服務器必須要有一套數字證書,可以自己製作,也可以向組織申請,區別就是自己頒發的證書需要客戶端驗證通過,纔可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面。

這套證書其實就是一對公鑰和私鑰,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然後發給你,因爲只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。

【3】傳送證書

這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,過期時間等等。

【4】客戶端解析證書

由客戶端的 TLS 來完成,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等。如果發現異常,則會彈出一個警告框,提示證書存在問題。

如果證書沒有問題,那麼就生成一個隨機值,然後用證書對該隨機值進行加密,就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。

【5】傳送加密信息

用證書加密後的隨機值,目的就是讓服務端得到這個隨機值,以後客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了。

【6】服務端解密信息

服務端用私鑰解密後,得到了客戶端傳過來的隨機值 (私鑰),然後把內容通過該值進行對稱加密,所謂對稱加密就是,將信息和私鑰通過某種算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密算法夠厲害,私鑰夠複雜,數據就夠安全。

【7】傳輸加密後的信息

服務段用私鑰加密後的信息,可以在客戶端被還原。

【8】客戶端解密信息

客戶端用之前生成的私鑰解密服務段傳過來的信息,於是獲取瞭解密後的內容,整個過程第三方即使監聽到了數據,也無法解密信息。

HTTPS 的缺點

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/hEzu91CRPMvbrBvImPMibQ