《圖解http》讀書筆記(三)
第七章 確保web安全的HTTPS
HTTP在安全性方面並沒有保障,所以我們不得不提到HTTPS,HTTPS並非是一種新的協議,HTTPS = HTTP + SSL,相信大家都知道,接下來一起看一下https到底是什麼吧?
HTTP存在的問題:
- 明文傳輸,不加密
- 不驗證通訊方的身份
- 無法保證報文的完整性
所以,https也就是HTTP + 加密 + 認證 + 完整性保護 ,彌補了http在安全性方面的缺陷。
插播兩個小概念:
- 共享金鑰加密(對稱金鑰加密): 加解密是同一個金鑰
- 公開金鑰加密(非對稱金鑰加密):有一對非對稱金鑰,公鑰和私鑰,私鑰只有自己知道,公鑰是公開的,通訊時,傳送方採用接受方的公鑰加密,接收方收到後用自己的私鑰解密
HTTPS採用共享金鑰加密和公開金鑰加密的混合加密機制。通訊雙方建立連線後,先通過公開金鑰加密機制,傳輸接下來要使用的共享金鑰加密的金鑰,再使用共享金鑰加密機制通訊。
這裡客戶端怎麼確認伺服器端的公鑰是正確的呢? 伺服器端先去CA申請公鑰,CA稽核後會發數字證書,客戶端只需要核實數字證書的有效性就可以知道伺服器端的公鑰是否正確。
https的通訊機制如下:
第九章 基於http的功能追加協議
http的瓶頸:
- 一條連線上只可傳送一個請求
- 請求只能從客戶端開始,客戶端不可以接收除響應外的指令
- 請求或響應首部未經壓縮就傳送,首部資訊越多延遲越大
- 傳送冗長的首部,每次互相傳送相同的首部造成的浪費較多
- 可任意選擇資料壓縮格式,非強制壓縮傳送
優化方案:
Aajx:非同步請求,區域性更新
Comet:收到請求,先將響應掛起,等伺服器端有更新,再返回
SPDY:多路複用(一個Tcp連線,可以處理多個http請求);賦予請求優先順序;壓縮HTTP首部;推送功能(伺服器端可以主動向客戶端推送資料);伺服器提示功能(主動提示客戶端請求所需的資源)
WebSocket
WebSocket是 web瀏覽器與web伺服器之間的全雙工通訊標準,是一個新的協議,WebSocket是建立在http基礎上的協議,因此建立連線時,發起方還是客戶端。
websocket的特點:推送功能(伺服器端可主動推動資料到客戶端);減少通訊量(相比http,連線時的總開銷減少,websocket首部的資訊量也很少)
由於是建立在HTTP
基礎上的協議,因此連線的發起方仍是客戶端,而一旦確立WebSocket
通訊連線,不論伺服器端還是客戶端,任意一方都可直接向對方傳送報文。
websocket例子:
握手請求:
GET /chat HTTP/1.1
Host: server.example.com
//告訴伺服器我使用的是websocket連線
Upgrade: websocket
Connection: Upgrade
//驗證請求,瀏覽器生成
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== //握手過程中必不可少的鍵值
Sec-WebSocket-Protocol: chat, superchat //使用的子協議
Sec-WebSocket-Version: 13
Origin: http://example.com
伺服器端響應:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
成功握手確立websocket連線之後,通訊時不再使用http資料幀,而是使用websocket獨立的資料幀。