前端學(xué)習(xí)23 http和https
1.概念
HTTP:超文本傳輸協(xié)議(Hyper Text Transfer Protocol)是一種詳細(xì)規(guī)定了瀏覽器和萬維網(wǎng)服務(wù)器之間互相通信的規(guī)則,通過因特網(wǎng)傳送萬維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議。
HTTPS:超文本傳輸安全協(xié)議(Hypertext Transfer Protocol Secure,簡稱:HTTPS)是一種通過計算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議。HTTPS經(jīng)由 HTTP 進(jìn)行通信,利用 SSL/TLS 來加密數(shù)據(jù)包。HTTPS 的主要目的是提供對網(wǎng)站服務(wù)器的身份認(rèn)證,保護(hù)交換數(shù)據(jù)的隱私與完整性。
2.http和https區(qū)別
- HTTP是明文傳輸,連接很簡單,是無狀態(tài)的。https協(xié)議是有SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份證的網(wǎng)絡(luò)協(xié)議,比HTTP協(xié)議安全。
- HTTP對搜索引擎更友好,利于SEO;谷歌、百度優(yōu)先索引HTTPS網(wǎng)頁。
- 使用不同的連接方式,端口也不同,HTTPS標(biāo)準(zhǔn)端口443,HTTP標(biāo)準(zhǔn)端口80。
- HTTPS協(xié)議需要CA證書,費(fèi)用較高,而HTTP協(xié)議不需要。
3.HTTPS 握手過程
- 客戶端發(fā)起 HTTPS 請求,發(fā)送客戶端生成的隨機(jī)數(shù)1和支持的加密算法列表;
- 服務(wù)端返回證書、服務(wù)端生成的隨機(jī)數(shù)2、選擇的加密方法給客戶端;
- 客戶端對證書進(jìn)行合法性驗(yàn)證,驗(yàn)證通過后再生成一個隨機(jī)數(shù)3,并使用數(shù)字證書中的公鑰,加密這個隨機(jī)數(shù),然后發(fā)給服務(wù)器。并且還會提供一個前面所有內(nèi)容的 hash 的值,用來供服務(wù)器檢驗(yàn)。
- 服務(wù)器使用自己的私鑰,來解密客戶端發(fā)送過來的隨機(jī)數(shù)3。并提供前面所有內(nèi)容的 hash 值來供客戶端檢驗(yàn)。
- 三次握手此時已經(jīng)完成,之后客戶端和服務(wù)端都會根據(jù)這三個隨機(jī)數(shù),生成一個隨機(jī)對稱密鑰,之后的數(shù)據(jù)都通過隨機(jī)對稱密鑰進(jìn)行加密傳輸。
4.TCP的三次握手、四次揮手
4.1 三次握手
關(guān)鍵標(biāo)志位
- SYN,簡寫為S,同步標(biāo)志位,用于建立會話請求,同步序列號;
- ACK,簡寫為.,確認(rèn)標(biāo)志位,確認(rèn)已接受的數(shù)據(jù)包;
- FIN,簡寫為F,完成標(biāo)志位,表示傳輸完畢,將要關(guān)閉連接;
若SYN=1,ACK=0,表示是來自發(fā)送方的一個“連接請求”;
若SYN=1,ACK=1,表示接收方“同意接受連接請求”。
第一次握手:客戶端主動打開連接,將TCP報文標(biāo)志位SYN置為1,并隨機(jī)產(chǎn)生一個序號值seq=x(SYN=1,ACK=0,seq=x,請求連接),發(fā)送數(shù)據(jù)包給服務(wù)端。發(fā)送完畢進(jìn)入SYN-SENT狀態(tài);
第二次握手:服務(wù)端接收到標(biāo)志位為SYN=1,ACK=0的數(shù)據(jù)包,得知客戶端請求建立連接。服務(wù)端將標(biāo)志位置作:SYN=1,ACK=1,ack=x+1,并隨機(jī)產(chǎn)生序號值seq=y;發(fā)送數(shù)據(jù)包給客戶端,同意建立連接。進(jìn)入SYN-RCVD狀態(tài)。
第三次握手:客戶端得到了服務(wù)端的確認(rèn)。檢查ACK是否為1,ack是否為x+1。若是的話,則ACK=1,ack=y+1。服務(wù)端再檢查,ACK是否為1,ack是否為y+1。若正確則建立好連接通道。
第三次握手保證了B的資源不會被浪費(fèi)(如果A一直不發(fā)送數(shù)據(jù))。
4.2 四次揮手
第一次揮手: 客戶端想釋放連接。使FIN=1,表示請求釋放連接,隨機(jī)產(chǎn)生seq=x;發(fā)送給客戶端,并進(jìn)入FIN-WAIT-1階段(半關(guān)閉狀態(tài),停止客戶端向服務(wù)器端上發(fā)送數(shù)據(jù))。但實(shí)際上,客戶端還能向服務(wù)器端發(fā)送ACK確認(rèn)報文。
第二次揮手: 服務(wù)器端接收到客戶端想釋放連接的請求。使ACK=1,ack=x+1,并隨機(jī)產(chǎn)生seq=y。發(fā)送給客戶端,表示“接收到了客戶端的想釋放連接的請求”。服務(wù)器端進(jìn)入CLOSE-WAIT階段。
客戶端接收到報文,進(jìn)入FIN-WAIT-2階段。
前兩次握手:客戶端讓服務(wù)器端知道:我想釋放連接;服務(wù)器端讓客戶端知道:我知道了你想釋放連接。于是可以確認(rèn)關(guān)閉客戶端到服務(wù)器端的連接,完成了一個方向上連接的釋放!
第三次揮手: 在第二次揮手發(fā)送報文給客戶端時,服務(wù)器端進(jìn)入了CLOSE-WAIT階段。當(dāng)CLOSE-WAIT結(jié)束后, 服務(wù)器端做好了釋放“服務(wù)器端到客戶端方向”連接的準(zhǔn)備。于是發(fā)送報文,使FIN=1,ACK=1,表示準(zhǔn)備好釋放連接。ack=x+1,seq=z;隨后,服務(wù)器端進(jìn)入LAST-ACK階段。停止服務(wù)器端到客戶端發(fā)送數(shù)據(jù),但能接受來自客戶端的數(shù)據(jù)。
第四次揮手: 客戶端發(fā)送報文:ACK=1表示接收到了“服務(wù)器準(zhǔn)備好釋放連接".ack=z+1,seq=w;。
因?yàn)門CP是全雙工模式,兩個方向都可以進(jìn)行通信,所以需要四次揮手來關(guān)閉兩個方向上的連接。