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