1. 程式人生 > >談一談我所了解的https

談一談我所了解的https

基本 body 服務 狀態 edi 程序 既然 mage post

一、 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、tcp的三次握手

談到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、tcp的四次揮手

由於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數據包,瀏覽器會將header和data一並發送出去,等待服務器的回應;而在post請求中,會產生2個TCP數據包。,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data。

5、常用的http狀態碼

狀態碼響應類別原因短語
1XX 信息性狀態碼(Informational) 服務器正在處理請求
2XX 成功狀態碼(Success) 請求已正常處理完畢
3XX 重定向狀態碼(Redirection) 需要進行額外操作以完成請求
4XX 客戶端錯誤狀態碼(Client Error) 客戶端原因導致服務器無法處理請求
5XX 服務器錯誤狀態碼(Server Error) 服務器原因導致處理請求出錯

總的來說,我現在項目有用到的:
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 服務器超負載或停機維護

二、 https概述

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