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