一、客戶端和服務端的請求原理
客戶端與服務端互動時將會涉及到協議的內容,通常我們使用的是http/https協議。注意http協議是基於傳輸層協議(tcp/udp等)之上的應用層協議,而https協議是在tcp/udp和http協議之間加了一層ssl/tls傳輸協議,http協議不保證安全傳輸,而https是安全的,其中使用了數字證書(ca證書)的機制,具體原理是什麼,我們往下看。
二、http協議及其組成
請求資訊:
get /day08/first http/1.1 --請求行
方法 url/uri 協議以及版本號
host: localhost:8080 --請求頭(以鍵值對形式出現)
user-agent: mozilla/5.0 (windows nt 6.1;wow64; rv:37.0) gecko/20100101 firefox/37.0
accept-language:en-gb,en-us;q=0.8,zh-cn;q=0.6,zh;q=0.4,en;q=0.2
accept-encoding: gzip, deflate
connection: keep-alive
--乙個空行
name=eric&password=123456 --- 實體內容
響應資訊:
http/1.1 200 ok --響應行
server: apache-coyote/1.1 --響應頭
content-length: 24
date: mon, 08 jun 2015 01:51:04 gmt
--乙個空行
-實體內容
url與uri的區別
url(uniform resource locater)位址用於描述乙個網路上的資源,如
格式為schema://host[:port#]/path/.../?[url-params]#[ query-string]
scheme :指應用層使用的協議(如http、https、ftp等)。
host:ip或者網域名稱。
port:埠號,不顯示為預設埠,即80埠。
path:訪問資源的路徑。
#:錨點,用於定位到頁面中某個位置。
uri(uniform resource identifier):統一資源描述符,每個服務期資源都有對應的名字,這樣客戶端就可以根據這個名字找到對應的資源。如上面的postedit。
總的來說,uri是用來描述網際網路上的某個資源。而url是表示某個資源的位址(網際網路所在位置)。
方法
get:一般是用於傳送乙個url去獲取服務端的資源(一般用於查詢操作)。
post:一般使用者客戶端傳輸乙個實體給到服務端,讓服務端去儲存(一般用於建立操作)
put:向服務端 傳送資料,一般用於更新操作。
head:用於向服務端發起乙個查詢請求獲取 head 資訊,比如獲取index.html 的有效性、最近更新時間等。
delete:客戶端發起乙個 delete 請求要求服務端把某個資料刪除(一般用於刪除操作)。
options :查詢指定 uri 支援的方法型別(get/post)。
等。。。
http協議的特點
http協議是無狀態的,也就是http協議本身不會對請求和響應之間的狀態做儲存。
那如何是實現有狀態的協議呢?這是http引入了cookie技術來解決無狀態的問題,即通過在請求和響應報文中寫入cookie資訊來控制客戶端的狀態。cookie會根據從伺服器端傳送的響應報文內的乙個叫做 set-cookie 的首部字段資訊,通知客戶端儲存 cookie。當下次客戶端再往該伺服器傳送請求時,客戶端會自動在請求報文中加入 cookie 值後傳送出去。session的實現也是基於cookie的,當服務端建立session時,瀏覽器中會使用cookie儲存對應的sessionid。
http協議的缺陷
1、通訊使用明文,內容可能會被監聽。
2、不能驗證雙方的身份。
3、無法驗證報文的完整性,報文可能會被篡改。
三、https互動原理分析
在這之前,我們先理解幾個基本概念
公鑰和私鑰:通過演算法得到的乙個金鑰對,公鑰是公開的部分,私鑰是未公開的部分。其中乙個加密的話,另外乙個則用來解密。
對稱加密:加密和解密使用的是同樣的金鑰。優點是演算法公開,計算量小,加密速度快,加密效率高。缺點是金鑰的分發和管理非常苦難,不夠安全。
非對稱加密:即「公鑰加密,私鑰解密」或「私鑰加密,公鑰解密」。私鑰只能由一方保管,不能外洩,而公鑰可以給任何人。優點是安全更高,只要不洩露私鑰給別人就大大提公升了安全性。但缺點是加密解密的速度較慢,效率不高,只適合對少量資料進行加解密。
https簡介
由於 http 協議通訊的不安全性,所以人們為了防止資訊在傳輸過程中遭到洩漏或者篡改,就想出來對傳輸通道進行加密的方式 https。https 是一種加密的超文字傳輸協議,它與 http 在協議差異在於對資料傳輸的過程中, https 對資料做了完全加密。由於 http 協議或者 https協議都是處於 tcp 傳輸層之上,同時網路協議又是乙個分層的結構,所以在 tcp 協議層之上增加了一層 ssl(secure socket layer,安全層)或者 tls(transport layer security) 安全層傳輸協議組合使用用於構造加密通道。
https的實現原理
首先我們通過一張圖來了解一下客戶端與服務端建立安全通訊的前提,即數字證書的機制
具體的過程描述如下:
1.瀏覽器將自己支援的一套加密規則傳送給**。
2.**從中選出一組加密演算法與hash演算法,通過ca機構將自己的身份資訊生成證書返回到瀏覽器。證書裡面包含了摘要、簽名等資訊。
3.瀏覽器獲得**證書之後瀏覽器要做以下工作:
a.驗籤。通過則獲得信任。
b.瀏覽器會生成一串隨機數的
密碼,並用證書中提供的公鑰(伺服器的公鑰)加密。
c.使用約定好的hash演算法計算握手訊息,並使用生成的隨機數對訊息進行加密,最後將之前生成的所有資訊傳送給**。
4.**接收瀏覽器發來的資料之後要做以下的操作:
a.使用自己的私鑰將資訊解密取出密碼,使用密碼解密瀏覽器發來的握手訊息,並驗證hash(約定好的hash演算法計算資訊)是否與瀏覽器發來的一致
b.使用密碼加密一段握手訊息,傳送給瀏覽器。
5.瀏覽器解密並計算握手訊息的hash,如果與服務端發來的hash一致,此時握手過程結束,之後所有的通訊資料將由之前瀏覽器生成的隨機密碼並利用對稱加密演算法進行加密。
參考文章
分布式協議
分布式一致性 raft 協議 分布式容錯 複製協議見 分布式中的一致性與可用性之複製 分布式協議主要有 分布式事務其實是指會涉及到操作多個資料庫的事務。就是將對同一庫事務的概念擴大到了對多個庫的事務。目的是為了保證分布式系統中的資料一致性。分布式事務處理的關鍵是必須有一種方法可以知道事務在任何地方所...
分布式架構基礎 HTTPS協議
https簡介 由於http協議通訊的不安全性,所以人們為了防止資訊在傳輸過程中遭到洩漏或者篡改,就想出來對傳輸通道進行加密的方式 https。https是一種加密的超文字傳輸協議,它與http協議的差異在於對資料傳輸的過程中,https對資料做了完全加密。由於http協議或者https協議都是處於...
分布式路由協議
路由收斂時間 從網路故障發生到所有路由器 表示式達到一致所需要的時間 路由收斂可能會引起兩個主要問題 路由黑洞和路由迴路。分布式路由協議在常用在控制平面。網路中的涉及 的每乙個節點通過分布式演算法計算推斷各自的 表。這些分布式協議基於兩個原則 1 每個節點向它的鄰居節點報告自己的路由資訊 2 一旦受...