歡迎光臨
每天分享高質量文章

談一談我所瞭解的HTTPS

來自:慕課網,作者:klivitamJ

鏈接:http://www.imooc.com/article/42940

前言

這篇文章我想寫很久了,本來想等應用用上https之後再進行闡述。但是時不我待,感覺我們的專案在需求的壓力下,暫時沒有人、精力來完善這一塊。但是我並不想我之前的研究白費,所以我就在這裡寫下,我所瞭解的https。

http協議

首先我並不會很深入的去探討這個東西,即使我曾經花了很長的時間去研究這個東西。主要是我考慮到

1、 自己沒有系統的去學習這一塊的知識,講解的會比較的膚淺。
2、 就算是懂這個東西也不一定會為諸位看官講清楚這個東西。

考慮到上面兩條,我決定關於http這一塊,我就重點來講:

1、http的基本概念
2、http的三次握手
3、http的四次揮手
4、常用的http方法
5、常用的http狀態碼

1、http的基本概念:

協議是指計算機通信網絡中兩台計算機之間進行通信所必須共同遵守的規定或規則,超文本傳輸協議(HTTP)是一種通信協議,它允許將超文本標記語言(HTML)文件從Web服務器傳送到客戶端的瀏覽器。

http協議,即超文本傳輸協議。是一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,通過因特網傳送萬維網文件的資料傳送協議。

http協議是用於從萬維網服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文件,還確定傳輸文件中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。

http是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。

http協議永遠都是客戶端發起請求,服務器回送響應。這樣就限制了使用http協議,無法實現在客戶端沒有發起請求的時候,服務器將訊息推送給客戶端。

http協議的主要特點可概括如下:

1、支持客戶/服務器樣式。支持基本認證和安全認證。

2、簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有get、head、post。每種方法規定了客戶與服務器聯繫的型別不同。由於http協議簡單,使得http服務器的程式規模小,因而通信速度很快。

3、靈活:http允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。

4、http 0.9和1.0使用非持續連接:限制每次連接只處理一個請求,服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。http 1.1使用持續連接:不必為每個web物件創建一個新的連接,一個連接可以傳送多個物件,採用這種方式可以節省傳輸時間。

5、無狀態:http協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的資料量增大。

2、http的三次握手

談到http必定就會談到的一個問題–http的三次握手,三次握手其實你真正明白這個問題了之後,這個東西會被你想的很簡單。首先你要明白三次揮手是用來幹嘛的?
在TCP/IP協議中,TCP協議提供可靠的連接服務,採用三次握手建立一個連接。如下圖所示

希望有大佬們推薦一個好用的畫圖軟體

首先明白上面的含義的時候,你必須要瞭解幾個狀態的含義:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)。
結合上圖我們將連接過程分為三個過程:

(1):首先是客戶端發送syn包(syn=j)到服務器,併進入SYN_SEND狀態,等待服務器確認;

(2):服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

(3):客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。 完成三次握手,客戶端與服務器開始傳送資料。

3、http的四次揮手

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料發送任務後就能發送一個FIN來終止這個方向的連接。收到一個 FIN只意味著這一方向上沒有資料流動,一個TCP連接在收到一個FIN後仍能發送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。如下圖所示

結合上圖可知,我們將關閉連接的過程劃分為四個過程:

(1)客戶端發送一個FIN,用來關閉客戶到服務器的資料傳送。
(2)服務器收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。
(3)服務器關閉與客戶端的連接,發送一個FIN給客戶端。
(4)客戶端發回ACK報文確認,並將確認序號設置為收到序號加1。

4、常用的http方法與使用場景

http的方法有很多,大概有:

1、 GET:用於請求訪問已經被URL(統一資源識別符號)識別的資源,可以通過URL傳參給服務器。

2、 POST:用於傳輸信息給服務器,主要功能與Get方法類似,但一般推薦POST方式。

3、 PUT:傳輸檔案,報文主體包含檔案內容,儲存到對應URL位置。

4、 HEAD:獲取報文首部,與GET方法類似,只是不傳回報文主體,一般用於驗證URL是否有效。

5、 DELET:刪除檔案,與PUT方法相反,刪除對應URL位置的檔案。

6、 OPTIONS:查詢相應URL支持的HTTP方法。

但是我經常使用的還是get加post,我在這裡就簡單的介紹一下get/post的區別吧:

(1) get請求一般用來獲得資料,而post請求一般用來發送資料。人們期望,get請求不會對服務器造成任何影響,而post請求則可能會影響服務器端的資料。get請求消耗的資源較post請求而言,會少一些,但相對安全性較差。發送同樣大小的資料,get請求的效率最高可以達到post請求的2倍。

(2)一般按照約定,使用get請求時,將資料通過url進行傳遞,而是用post請求時,將資料放在body里。但這並非硬性規定,因為method和data本身是正交的。post請求亦可將資料放在url中。

(3)就協議底層實現而言,在get請求中,只產生一個TCP資料包,瀏覽器會將essay-header和data一併發送出去,等待服務器的回應;而在post請求中,會產生2個TCP資料包。,瀏覽器先發送essay-header,服務器響應100 continue,瀏覽器再發送data。

5、常用的http狀態碼

總的來說,我現在專案有用到的:

200 OK 請求正常處理完畢
204 No Content 請求成功處理,沒有物體的主體傳回
304 Not Modified 發送的附帶條件請求未滿足
400 Bad Request 請求報文語法錯誤或引數錯誤
401 Unauthorized 需要通過HTTP認證,或認證失敗
403 Forbidden 請求資源被拒絕
404 Not Found 無法找到請求資源(服務器無理由拒絕)
500 Internal Server Error 服務器故障或Web應用故障
503 Service Unavailable 服務器超負載或停機維護

http概念

https呢?可以理解為HTTP+SSL/TLS, 即 HTTP 下加入 SSL 層,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL,用於安全的 HTTP 資料傳輸。眾所周知,我們在使用http協議的時候,資料的交換都是明文,這樣就會帶來很大的信息安全於是引入了https。

我在這裡呢?主要是講述https的對稱加密和非對稱加密。後面我在真正開始寫演算法章節的時候,會重點來講一講我研究的幾個加密演算法。

1、對稱加密

對稱加密呢?打個不切當的比方,小明和小紅在上學的時候互生情愫,但是又害怕被父母發現。於是他們想到了一個辦法,就是他們在一個大樹下麵放了一個箱子,並且用鎖鎖起來。如果小紅給小明寫了信,就通知小明拿著鑰匙去去放在箱子裡面的信。小明取信也是如此。

小明和小紅的鑰匙就好比對稱加密中資料傳輸雙方的公鑰,資料可以通過公鑰加密後,通過他們僅有他們知道的公鑰去解密。這種加密方法一定程度上面做到加密的效果。這樣做的好處主要有:對稱加密演算法的優點是演算法公開、計算量小、加密速度快、加密效率高。但是如果小明和小紅的鑰匙遺失也就是保密雙方的公鑰丟失,或者小明、小紅的鑰匙被泄漏也就是公鑰解密方式被泄漏 這樣也就達不到加密的效果了。
我這裡有一個不恰當的動畫

背景:小明和小紅買了一個箱子,一把鎖。兩個人揣著兩把鎖的鑰匙,想通過這個來傳遞書信。
一回目 小明:小紅,我給你寫了一封信。(對稱加密)
二回目 小紅拿出箱子的鑰匙,打開箱子讀取小明寄來的書信。(對稱解密)
三回目 小紅:小明,我給你回信了,(對稱加密)
四回目 小明拿出箱子的鑰匙,打開箱子讀取小紅回寄的書信。(對稱解密)

2、非對稱加密

既然對稱加密方式存在很大程度上的缺陷。於是聰明的計算機先輩們就發明瞭非對稱加密。關於非對稱加密呢?其運行的方式:

首先乙方生成一對密鑰(公鑰和私鑰)並將公鑰向其它方公開。然後得到該公鑰的甲方使用該密鑰對機密信息進行加密後再發送給乙方。最後乙方再用自己儲存的另一把專用密鑰(私鑰)對加密後的信息進行解密。乙方只能用其專用密鑰(私鑰)解密由對應的公鑰加密後的信息。反之也一樣。

這樣做的話,即使在傳輸過程中攻擊者截獲了傳輸的密文,並得到了乙的公鑰,也無法破解密文,因為只有乙的私鑰才能解密密文。這種方式在一定程度加強了資料的安全性。但是同樣非對稱加密的缺點是加密和解密花費時間長、速度慢,只適合對少量資料進行加密。

同樣我在這裡也畫了一個動畫。

背景:被雙方媽媽掌握鑰匙的小男女,於是雙方都買了一個未上鎖的箱子
一回目 小紅拿著未上鎖的箱子跟小明說:小明,如果你想跟我寫信,就放在這個箱子裡面。
二回目 小明將寫好的書信,放在箱子裡面,並且鎖好,並跟小紅說:小紅,我給你寫信了。
三回目 小紅拿出箱子的鑰匙,將箱子裡面的書信取出來,開心的讀了起來並感慨:小明真有趣。

最後說點https和http

1、 基本概念:

HTTP:是互聯網上應用最為廣泛的一種網絡協議,是一個客戶端和服務器端請求和應答的標準(TCP),用於從萬維網服務器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網絡傳輸減少。

HTTPS:是以安全為標的的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。HTTPS協議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證資料傳輸的安全;另一種就是確認網站的真實性。

2、 http與https有什麼區別

1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。

2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。

4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

說在最後

這篇文章其實早就該寫出來了,但是自己挨都今天才去發表 講道理還是比較拖延癌的前兆的。其實這篇文章並不是我研究的全部,但是我這篇文章的目的是讓各位看官大致的認識到https和http。好了,最近提倡早睡、早起 就不繼續寫下去了。準備手繪幾張對稱/非對稱圖來加深大家對這個的理解。如果有好的畫圖工具可以跟我說一哈,不然我自己都看不下去我的手繪了。

相關閱讀:

網站HTTP升級HTTPS完全配置手冊

Chrome發大招! HTTP網站全部拉入黑名單

HTTPS 到底加密了什麼?

HTTPS科普掃盲帖


用信鴿傳送來解釋 HTTPS 協議,讓 HTTPS 不再難懂

全民 https 時代,為你盤點免費 SSL 證書的那些事兒

也許這樣理解 HTTPS 更容易

全站HTTPS沒你想象的那麼簡單,電商網站兼顧安全與性能的踩坑小結


為何你會被強插廣告/盜號?談HTTPS連接的那些

接入HTTPS,給網站加一把綠色小鎖

Node.js開啟Https的小實踐


●編號690,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Web開發

更多推薦18個技術類公眾微信

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

赞(0)

分享創造快樂

© 2021 知識星球   网站地图