解說http,https,websocket三者協(xié)議以及關(guān)系
[重要通告]如您遇疑難雜癥,本站支持知識付費(fèi)業(yè)務(wù),掃右邊二維碼加博主微信,可節(jié)省您寶貴時間哦!
最近一直在折騰websocket,折騰來折騰去各種的問題,現(xiàn)在記錄一下,以備自己以后的之需,
http
什么是http
??Hyper Text Transfer Protocol?超文本傳輸協(xié)議
??建立在TCP上無狀態(tài)的連接
??客戶端發(fā)送一個HTTP請求到服務(wù)器,服務(wù)器接收后開始處理請求并根據(jù)
??請求訪問服務(wù)器資源,最后通過HTTP響應(yīng)把結(jié)果返回給客戶端
http請求
??狀態(tài)行??請求方式Method(get/post/put/delete)、資源路徑URL、
???????協(xié)議版本Version
??請求頭??訪問的域名、用戶代理、Cookie等信息
??請求正文?HTTP請求的數(shù)據(jù)
http響應(yīng)
??狀態(tài)行??協(xié)議版本Version、狀態(tài)碼Status Code、回應(yīng)短語
??響應(yīng)頭??搭建服務(wù)器的軟件,發(fā)送響應(yīng)的時間,回應(yīng)數(shù)據(jù)的格式等信息
??響應(yīng)正文?響應(yīng)的具體數(shù)據(jù)
???????狀態(tài)碼
????????1xx 請求已接收繼續(xù)處理請求
????????2xx 請求已經(jīng)處理完成(200--請求正常處理完成)
????????3xx 請求訪問的URL重定向到其他目錄
??????????301--請求永久重定向;
??????????302--請求臨時重定向;
??????????304--請求被重定向到客戶端本地緩存
????????4xx 客戶端出現(xiàn)錯誤
??????????400--客戶端請求存在語法錯誤;
??????????401--請求沒經(jīng)過授權(quán);
??????????403--請求被服務(wù)器端拒絕,客戶端無訪問權(quán)限;
??????????404--URL在服務(wù)端不存在
????????5xx 服務(wù)端出現(xiàn)錯誤
??????????500--服務(wù)端永久錯誤;503--服務(wù)端發(fā)生臨時錯誤
??響應(yīng)模式
????單進(jìn)程I/O模型???一進(jìn)程僅處理一個請求,對請求順序處理
????多進(jìn)程I/O模型???多進(jìn)程,同事處理多個請求
????復(fù)用I/O模型????一個進(jìn)程多個線程,一個線程響應(yīng)一個請求,
?????????????可以達(dá)到同時處理多個請求,線程并發(fā)執(zhí)行
????復(fù)用多線程I/O模型?多個進(jìn)程多個線程
https
什么是https
http的安全版,http下加入SSL層,https安全基礎(chǔ)是SSL,加密的詳細(xì)內(nèi)容需要SSL主要作用
1.建立一個信息安全通道,保證數(shù)據(jù)傳輸?shù)陌踩?br /> 2.確認(rèn)網(wǎng)站的真實性原理、步驟
客戶端使用https的url訪問web服務(wù)器,要求與服務(wù)器建立SSL連接
服務(wù)器收到客戶端請求后,會將網(wǎng)站的證書信息(證書包含公鑰)傳送一份給客戶端
客戶端的瀏覽器和服務(wù)器開始協(xié)商SSL連接的安全等級,即信息加密等級
客戶端的里瀏覽器根據(jù)雙方同意的安全等級建立會話秘鑰,利用網(wǎng)站公鑰將會話秘鑰加密并傳送給網(wǎng)站
web服務(wù)器利用自己的私鑰解密出會話的秘鑰
服務(wù)器利用會話秘鑰加密與客戶端之間的通信優(yōu)點(diǎn)
可認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)?發(fā)送到正確?的客戶機(jī)和服務(wù)器
防止數(shù)據(jù)在傳輸過程中不被竊取改變?保證數(shù)據(jù)的完整性
雖不是絕對安全的,但大幅度?增加了中間人的成本
比起同等http網(wǎng)站,采用https加密的網(wǎng)站在?搜索?結(jié)果中?排名會更高缺點(diǎn)
握手階段較?費(fèi)時,使頁面加載時間延長50%,增加10%到20%的耗電
https連接緩存?不?如http?高效,增加數(shù)據(jù)開銷和功耗,已有的安全措施也會因此受到影響
SSL證書?需要錢,功能越強(qiáng)證書費(fèi)用越高,個人網(wǎng)站小網(wǎng)站沒必要一般不會用
SSL證書?需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗
加密范圍有限,在黑客攻擊、拒絕服務(wù)攻擊、服務(wù)器劫持等方面幾乎起不到什么作用
websocket
什么是websocket
是一種網(wǎng)絡(luò)通信協(xié)議,與http沒有關(guān)系,是http的一種補(bǔ)充
HTML5開始提供的一種在單個TCP連接上進(jìn)行全雙工通訊的協(xié)議為什么用Websocket
http協(xié)議是一種無狀態(tài)、無連接、單向的應(yīng)用層協(xié)議
請求/響應(yīng)模型。只能由客戶端發(fā)起請求,服務(wù)端對請求做出應(yīng)答處理
HTTP協(xié)議無法實現(xiàn)服務(wù)器主動向客戶端發(fā)起信息
websocket允許客戶端和服務(wù)器之間進(jìn)行全雙工通信,任何一方都可以通過建立的連接將數(shù)據(jù)推送到另一端。
只需要建立一次連接就可以一直保持連接狀態(tài),比輪詢方式效率高客戶端使用
var Socket = new WebSocket(url,[protocol]);屬性
Socket.readyState
連接狀態(tài)
0:尚未建立;
1:建立,可以進(jìn)行通信;
2:連接正在關(guān)閉;
3:連接已經(jīng)關(guān)閉或者連接不能打開
Socket.bufferedAmount
已被send()放入正在隊列中等待傳輸,但是還沒有發(fā)出的UTF-8文本字節(jié)數(shù)事件
Socket.onopen??連接建立時觸發(fā)
Socket.onmessage 客戶端接收服務(wù)端數(shù)據(jù)時觸發(fā)
Socket.onerror??通信發(fā)生錯誤時觸發(fā)
Socket.onclose??連接關(guān)閉時觸發(fā)方法
Socket.send()??使用連接發(fā)送數(shù)據(jù)
Socket.close()??關(guān)閉連接
var ws = new WebSocket("ws://localhost:9998/echo");
ws.onopen = function () { // 使用 send() 方法發(fā)送數(shù)據(jù)
ws.send("發(fā)送數(shù)據(jù)");
alert("數(shù)據(jù)發(fā)送中...");
};
ws.onmessage = function (evt) { // 接收服務(wù)端數(shù)據(jù)時觸發(fā)事件
var received_msg = evt.data;
alert("數(shù)據(jù)已接收...");
};
ws.onclose = function () { // 斷開 web socket 連接成功觸發(fā)事件
alert("連接已關(guān)閉...");
};
問題未解決?付費(fèi)解決問題加Q或微信 2589053300 (即Q號又微信號)右上方掃一掃可加博主微信
所寫所說,是心之所感,思之所悟,行之所得;文當(dāng)無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!