HTTP 和 HTTPS 之間除了安全性區(qū)別外,還有哪些區(qū)別
HTTP 和 HTTPS 是兩種常見(jiàn)的網(wǎng)絡(luò)協(xié)議,它們都是用于在瀏覽器和服務(wù)器之間傳輸數(shù)據(jù)的。但是,它們之間也有一些重要的區(qū)別,這些區(qū)別涉及到數(shù)據(jù)的安全性、傳輸性能、使用成本和搜索排名等方面。本文將從以下幾個(gè)方面來(lái)介紹 HTTP 和 HTTPS 的區(qū)別,本文內(nèi)容大綱如下:
圖片
數(shù)據(jù)的安全性
HTTP 協(xié)議是一種明文傳輸協(xié)議,它不對(duì)數(shù)據(jù)進(jìn)行任何加密或驗(yàn)證,這意味著任何人都可以在網(wǎng)絡(luò)上截獲、查看或修改 HTTP 傳輸?shù)臄?shù)據(jù),這就存在很大的安全風(fēng)險(xiǎn),尤其是對(duì)于一些敏感的信息,如用戶名、密碼、銀行卡號(hào)、身份證號(hào)等。
HTTPS 協(xié)議是一種安全傳輸協(xié)議,它在 HTTP 的基礎(chǔ)上增加了 SSL/TLS 層,SSL/TLS 是一種加密和認(rèn)證技術(shù),它可以對(duì)數(shù)據(jù)進(jìn)行加密、解密、簽名和驗(yàn)證,這樣就可以保證數(shù)據(jù)的機(jī)密性、完整性和身份真實(shí)性,防止數(shù)據(jù)被第三方竊取或篡改。
圖片
圖片來(lái)源 https://coolcao.com 2018/08/06/https/
如上圖,HTTPS 流程包含握手和后續(xù)的數(shù)據(jù)傳輸,握手的目的是為了客戶端與服務(wù)端協(xié)商加密算法等參數(shù)。
HTTPS 協(xié)議的工作原理大致如下:
- 客戶端首次請(qǐng)求服務(wù)器,告訴服務(wù)器自己支持的協(xié)議版本,支持的加密算法及壓縮算法,并生成一個(gè)隨機(jī)數(shù)(client random)告知服務(wù)器。
客戶端需要提供的信息:
- 支持的協(xié)議版本,如 TSL1.0 版本
- 客戶端生成的隨機(jī)數(shù),用以稍后生成對(duì)稱密鑰
- 支持的加密算法;支持的壓縮方法等
- 服務(wù)器確認(rèn)雙方使用的加密方法,并返回給客戶端證書以及一個(gè)服務(wù)器生成的隨機(jī)數(shù)(server random)
服務(wù)器需要提供的信息:
- 協(xié)議的版本
- 加密的算法
- 服務(wù)器生成的隨機(jī)數(shù)
- 服務(wù)器證書
- 客戶端收到證書后,首先驗(yàn)證證書的有效性,然后生成一個(gè)新的隨機(jī)數(shù)(premaster secret),并使用數(shù)字證書中的公鑰,加密這個(gè)隨機(jī)數(shù),發(fā)送給服務(wù)器。
客戶端會(huì)對(duì)服務(wù)器下發(fā)的證書進(jìn)行驗(yàn)證,驗(yàn)證通過(guò)后,客戶端會(huì)再次生成一個(gè)隨機(jī)數(shù)(premaster secret),然后使用服務(wù)器證書中的公鑰進(jìn)行加密,以及放一個(gè) ChangeCipherSpec 消息即編碼改變的消息,還有整個(gè)前面所有消息的 hash 值,進(jìn)行服務(wù)器驗(yàn)證,然后用新秘鑰加密一段數(shù)據(jù)一并發(fā)送到服務(wù)器,確保正式通信前無(wú)誤。
- 服務(wù)器接收到加密后的隨機(jī)數(shù)后,使用私鑰進(jìn)行解密,獲取這個(gè)隨機(jī)數(shù)(premaster secret)。
- 最后,服務(wù)器和客戶端根據(jù)約定的加密方法,使用前面提到的三個(gè)隨機(jī)數(shù)(client random, server random, premaster secret),生成對(duì)稱密鑰,用來(lái)加密接下來(lái)的整個(gè)對(duì)話過(guò)程。服務(wù)端用對(duì)稱密鑰加密響應(yīng)數(shù)據(jù)傳給客戶端,客戶端用對(duì)稱密鑰解密響應(yīng)數(shù)據(jù),得到明文數(shù)據(jù)。
傳輸性能
要討論傳輸性能,需要針對(duì)不同的 HTTP 版本做說(shuō)明,
HTTPS VS HTTP 1.1
在 HTTP 1.1 中,HTTP 1.1 的性能比 HTTPS 還要好一些,主要是因?yàn)?span> HTTPS 只是在 HTTP 1.1 協(xié)議上增加了 SSL/TLS 層,沒(méi)有其他方面的修改。
增加了 SSL/TLS 層后,需要額外的加密和解密的過(guò)程,這會(huì)增加數(shù)據(jù)的處理時(shí)間和傳輸時(shí)間,同時(shí)也會(huì)消耗更多的 CPU 和內(nèi)存資源。另外 HTTPS 協(xié)議還需要進(jìn)行證書的驗(yàn)證和密鑰的協(xié)商,這也會(huì)增加連接的建立時(shí)間。
HTTP 1.1 連接建立過(guò)程只需要進(jìn)行 TCP 的三次握手,而 HTTPS 協(xié)議的連接建立過(guò)程還需要進(jìn)行 SSL/TLS 的握手,這會(huì)多出至少 6 次的往返時(shí)間(RTT)。
因此,HTTPS 的連接建立時(shí)間要比 HTTP 1.1 的連接建立時(shí)間長(zhǎng)得多。
HTTP 2 VS HTTP 1.1
HTTP 2 比起 HTTP 1.1 的性能提升就比較多了,主要有以下幾點(diǎn)。
二進(jìn)制分幀
HTTP 2 使用二進(jìn)制分幀,可以減少數(shù)據(jù)的大小和格式的復(fù)雜度,提高數(shù)據(jù)的傳輸效率。
它主要修改了 HTTP 1.1 的報(bào)文傳輸格式。HTTP 1.1 以換行符作為純文本的分隔符,而 HTTP 2 將所有傳輸?shù)男畔⒎指顬楦〉南⒑蛶?,并采用二進(jìn)制格式對(duì)它們編碼,這些幀對(duì)應(yīng)著特定數(shù)據(jù)流中的消息,他們都在一個(gè) TCP 連接內(nèi)復(fù)用。
多路復(fù)用
HTTP 2 支持多路復(fù)用,可以在一個(gè)連接上并發(fā)傳輸多個(gè)請(qǐng)求和響應(yīng),避免了隊(duì)頭阻塞和重復(fù)建立連接的開(kāi)銷。
HTTP 2 可以在共享 TCP 連接的基礎(chǔ)上同時(shí)發(fā)送請(qǐng)求和響應(yīng)。HTTP 消息可以被分解為獨(dú)立的幀,而不破壞消息本身順序的情況下交錯(cuò)發(fā)出去,在另一端根據(jù)流標(biāo)識(shí)符和首部將他們重新組裝起來(lái)。通過(guò)多路復(fù)用技術(shù),可以避免 HTTP 舊版本的消息頭阻塞問(wèn)題,極大提高傳輸性能。
首部壓縮
HTTP 2 支持首部壓縮,可以減少數(shù)據(jù)的傳輸量,節(jié)省了網(wǎng)絡(luò)的帶寬。
HTTP 2 使用了 HPACK 算法來(lái)壓縮頭字段,這種壓縮格式對(duì)傳輸?shù)念^字段進(jìn)行編碼,減少了頭字段的大小。同時(shí),在兩端維護(hù)了索引表,用于記錄出現(xiàn)過(guò)的頭字段,后面在傳輸過(guò)程中就可以傳輸已經(jīng)記錄過(guò)的頭字段的索引號(hào),對(duì)端收到數(shù)據(jù)后就可以通過(guò)索引號(hào)找到對(duì)應(yīng)的值。對(duì)比 HTTP 1.1 使用文本的形式傳輸消息頭,HTTP 2 的首部壓縮可以減少請(qǐng)求資源大小。
HTTP 2 缺點(diǎn)
說(shuō)了這么多 HTTP 2 的優(yōu)點(diǎn),那 HTTP 2 的缺點(diǎn)我們也需要清楚。
- HTTP 2 建立連接的延時(shí):HTTP 2 仍然基于 TCP 協(xié)議,因此需要進(jìn)行 TCP 的三次握手和 TLS 的握手,這會(huì)消耗一定的時(shí)間,影響數(shù)據(jù)的傳輸效率。
- HTTP 2 隊(duì)頭阻塞沒(méi)有徹底解決:HTTP 2 雖然支持多路復(fù)用,可以在一個(gè)連接上并發(fā)傳輸多個(gè)請(qǐng)求和響應(yīng),但是如果其中一個(gè)數(shù)據(jù)流發(fā)生了丟包或延遲,那么整個(gè) TCP 連接都會(huì)受到影響,導(dǎo)致后續(xù)的數(shù)據(jù)流也被阻塞。
- HTTP 2 多路復(fù)用容易超時(shí):HTTP 2 的多路復(fù)用技術(shù)使得多個(gè)請(qǐng)求其實(shí)是基于同一個(gè) TCP 連接的,那么如果某一個(gè)請(qǐng)求的處理時(shí)間過(guò)長(zhǎng),那么多個(gè)請(qǐng)求都可能超過(guò)客戶端的超時(shí)時(shí)間,導(dǎo)致請(qǐng)求失敗。
HTTP 3 VS HTTP 2
HTTP 3 相比 HTTP 2 的提升可以說(shuō)是全方位的,底層的傳輸協(xié)議由 TCP 協(xié)議改為使用基于 UDP 協(xié)議的 QUIC 協(xié)議,在應(yīng)用層實(shí)現(xiàn)了擁塞控制、可靠傳輸?shù)奶匦浴?/p>
優(yōu)點(diǎn)
HTTP 3 的優(yōu)點(diǎn)主要體現(xiàn)在它使用了 QUIC 協(xié)議,可以減少握手的延遲,提高連接的穩(wěn)定性,支持更高效的多路復(fù)用,以及更好的適應(yīng)網(wǎng)絡(luò)變化等
缺點(diǎn)
HTTP 3 的缺點(diǎn)主要體現(xiàn)在它仍然存在一些兼容性和穩(wěn)定性的問(wèn)題,有時(shí)候甚至?xí)?HTTP 2 稍微慢一點(diǎn)。這可能是由于擁塞控制算法的不同,或者是由于網(wǎng)絡(luò)設(shè)備和防火墻對(duì) UDP 的限制或過(guò)濾所導(dǎo)致的。
大家可以看到不同 HTTP 版本之間的性能差異是很大的。HTTP 2 和 HTTP 3 都是默認(rèn)建立在 HTTPS 之上的。所以如果想要更高的 HTTP 協(xié)議傳輸性能的話,可以使用 HTTP 2 或者 HTTP 3 協(xié)議。
使用成本
HTTP 的使用成本比起 HTTPS 而言就低的多了,主要是因?yàn)?span> HTTPS 協(xié)議需要申請(qǐng)和維護(hù)數(shù)字證書,這通常需要一定的費(fèi)用,而且證書的有效期有限,需要定期更新
在業(yè)務(wù)開(kāi)發(fā)中一個(gè)阿里云 HTTPS CA 的企業(yè)級(jí)證書一年的價(jià)格通常需要幾千人名幣.
另外,HTTPS 也需要消耗一丟丟的服務(wù)器資源,因?yàn)?span> TLS 層的加密和解密過(guò)程也需要 CPU 參與計(jì)算。
與之相比,HTTP 不需要申請(qǐng)和維護(hù)數(shù)字證書,也不需要更多的服務(wù)器資源,所以說(shuō) HTTP 協(xié)議的使用成本更低。
搜索排名
HTTPS 協(xié)議的搜索排名優(yōu)于 HTTP 協(xié)議,主要是因?yàn)?span> HTTPS 協(xié)議可以提高用戶的信任度和安全感,從而提高用戶的訪問(wèn)量和停留時(shí)間,這些都是搜索引擎優(yōu)化(SEO)的重要因素。
另外,一些主流的搜索引擎,如 Google 和百度,也明確表示,HTTPS 協(xié)議是搜索排名的一個(gè)重要權(quán)重指標(biāo),也就是說(shuō),HTTPS 網(wǎng)站比 HTTP 網(wǎng)站在搜索排名中更有優(yōu)勢(shì)。
HTTP 協(xié)議由于安全性較差,可能會(huì)導(dǎo)致用戶的流失和不滿,從而影響用戶的訪問(wèn)量和停留時(shí)間,這些都會(huì)降低搜索引擎優(yōu)化(SEO)的效果。而且,HTTP 協(xié)議也沒(méi)有得到搜索引擎的青睞,因此 HTTP 協(xié)議的搜索排名較低。
綜上所述,HTTPS 協(xié)議在安全性和搜索排名方面有明顯的優(yōu)勢(shì),而 HTTP 協(xié)議只是在成本控制方面會(huì)好一點(diǎn)。
隨著互聯(lián)網(wǎng)的發(fā)展,HTTPS 協(xié)議已經(jīng)成為越來(lái)越多網(wǎng)站的選擇,而 HTTP 協(xié)議已經(jīng)逐漸被淘汰。因此,建議網(wǎng)站的開(kāi)發(fā)者和運(yùn)營(yíng)者盡快將 HTTP 協(xié)議升級(jí)為 HTTPS 協(xié)議,以提高網(wǎng)站的安全性和競(jìng)爭(zhēng)力。