一:http和https
2、網路程式設計懶人入門(七):深入淺出,全面理解HTTP協議
3、從HTTP/0.9到HTTP/2:一文讀懂HTTP協議的歷史演變和設計思路
4、http協議入門
一、HTTP/0.9
預設使用80埠,只有一個get命令,伺服器只能迴應HTML格式的字串,伺服器傳送完畢就關閉TCP連線
二、HTTP/1.0
2.1: 簡介
a:任何格式都可以傳送;
b:除了get還引入了post和head命令;
c:http請求和迴應的格式也變了,除了資料部分,每次通訊必須包括頭資訊
d:其它新增的功能包括狀態碼、多字符集、多部分傳送、許可權、快取、內容編碼
2.2: content-type欄位
1.0版本規定頭資訊必須是ASCII編碼,後面的資料可以是任何格式。伺服器迴應的時候必須告訴客服端資料是什麼格式,這就是content-type欄位的作用
2.3: Content-Encoding欄位
Content-Encoding欄位說明資料壓縮的方法
2.4:缺點
每個TCP連線只能傳送一個請求。傳送資料完畢,連線就關閉,如果還有請求其它資源,就必須再新建一個連線
使用非標準欄位Connection,Connection:keep-alive,要求伺服器不要關閉TCP連線,伺服器同樣迴應這個欄位,直到主動關閉連線
三、HTTP/1.1
3.1 持久連線
引入持久連線,即TCP連線預設不關閉,可以被多個請求複用,客戶端和伺服器發現對方一段時間沒活動就可以關閉連線。規範的做法是客戶端在傳送最後一個請求時傳送Connection:close。同一域名大多數瀏覽器允許同時建立6個持久連線
3.2 管道機制
在同一個TCP連線裡面,客戶端可以同時傳送多個請求。允許瀏覽器同時發出A請求和B請求,伺服器按順序迴應
3.3 Content-Length欄位
該欄位宣告本次迴應的資料長度,區分資料包是屬於哪一個迴應的。
3.4 分塊傳輸編碼
使用Content-Length欄位的條件是伺服器傳送迴應之前,必須知道迴應的資料長度
對於一些耗時的動態操作,意味著伺服器要等到所有操作完成才能傳送資料。更好的處理方法是產生一塊資料就傳送一塊,採用“流模式”取代“快取模式”。
Transfer-Encoding:chunked
3.5 其它的新增功能
新增了:put、patch、head、options、delete
客戶端的請求頭資訊新增了Host欄位,用來指定伺服器的域名
3.6 缺點
允許複用TCP連線,但是在同一個TCP連線裡,所有的資料通訊按次序進行,伺服器處理完一個迴應,才會進行下一個迴應。前面的迴應慢,後面的就會有許多請求排隊等著,發生“隊頭阻塞”。
避免的方法:a:減少請求數 ; b:同時多開持久連線
四、SPDY協議
谷歌研發,HTTP/2的基礎
五、HTTP/2
下一版本是HTTP/3
5.1 二進位制協議
a:http/1.1的頭資訊是文字(ASCII編碼),資料體可以是文字,也可以是二進位制。
b:http/2則徹底是一個二進位制協議,稱為“幀”:頭資訊幀和資料幀
5.2 多工
複用TCP連線,在一個連線裡,客戶端和瀏覽器可以同時傳送多個請求或迴應,不用按順序一一回應。這樣的雙向的、實時的通訊,叫做多工。
5.3 資料流
a:資料包不是按順序傳送的,同一個連線裡面連續的資料包可能屬於不同的迴應。
b:HTTP/2將每個請求或迴應的所有資料包,稱為一個資料流,
c:每個資料流都有獨一無二的編號,標記ID區分屬於哪個資料流
d:客戶端發出的ID一律為奇數,伺服器發出的為偶數
e:資料流傳送到一半的時候,客戶端和伺服器都可以傳送訊號 “RE_STREAM幀”取消這個資料流
f:客戶端可以指定資料流的優先順序,優先順序越高伺服器越早迴應
5.4 頭資訊壓縮
a:http協議不帶狀態,每次請求附上所有資訊
b:引入頭資訊壓縮機制,使用gzip或compress壓縮後傳送
c:客戶端和伺服器同時維護一張頭資訊表,所有欄位存入表,生成一個索引號,只傳送索引號
5.5 伺服器推送
允許伺服器未經請求,主動向客戶端傳送資源
六:https
1、資料通訊
長連線:tcp、udp、websocket
短連線:http、https
http協議執行在TCP之上,明文傳輸,客戶端和服務端都無法驗證對方的身份;Https是身披SSL(Secure Socket Layer)外殼的http,執行於TCP之上,是新增了加密和認證機制的HTTP。
2、https的加密
1、HTTPS要使客戶端與伺服器端的通訊過程得到安全保證,必須使用的對稱加密演算法
2、但是協商對稱加密演算法的過程,需要使用非對稱加密演算法來保證安全。
這種加密指的是可以生成一對金鑰 (k1, k2)。凡是 k1 加密的資料,k1 自身不能解密,而需要 k2 才能解密;凡是 k2 加密的資料,k2 不能解密,需要 k1 才能解密。這種演算法事實上有很多,常用的是 RSA。
特點是私鑰加密後的密文,只要是公鑰,都可以解密,但是公鑰加密後的密文,只有私鑰可以解密。私鑰只有一個人有,而公鑰可以發給所有的人。
3、然而直接使用非對稱加密的過程本身也不安全,會有中間人篡改公鑰的可能性,所以客戶端與伺服器不直接使用公鑰,而是使用數字證書籤發機構頒發的證書來保證非對稱加密過程本身的安全。
4、這樣通過這些機制協商出一個對稱加密演算法,就此雙方使用該演算法進行加密解密。從而解決了客戶端與伺服器端之間的通訊安全問題。