WebSocket原理

今天來說一下WebSocket的原理,能讓你更深刻的去了解WebSocket,深知其原理,才能更好的去使用它。web

  WebSocket是HTML5出的協議,也就是說HTTP協議沒有變化,或者說不要緊,但HTTP是不支持持久鏈接的(長鏈接,循環鏈接的不算)。瀏覽器

首先HTTP有 1.1 和 1.0 之說,也就是所謂的 keep-alive ,把多個HTTP請求合併爲一個,可是 Websocket 實際上是一個新協議,跟HTTP協議基本沒有關係,只是爲了兼容現有瀏覽器的握手規範而已,也就是說它是HTTP協議上的一種補充。有交集,可是並非所有。服務器

  另外Html5是指的一系列新的API,或者說新規範,新技術。Http協議自己只有1.0和1.1,並且跟Html自己沒有直接關係。通俗來講,你能夠用HTTP協議傳輸非Html數據,就是這樣。再簡單來講,層級不同。websocket

   WebSocket的協議是持久化的,而HTTP是非持久化的協議。socket

   首先咱們來看個典型的 Websocket 握手加密

   GET /chat HTTP/1.1code

   Host: server.example.comserver

   Upgrade: websocket開發

   Connection: Upgrade字符串

   Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==

   Sec-WebSocket-Protocol: chat, superchat

   Sec-WebSocket-Version: 13

   Origin: http://example.com

這段相似HTTP協議的握手請求中,多了幾個東西。我會順便講解下做用。

   Upgrade: websocket

   Connection: Upgrade

  這個就是Websocket的核心了,告訴 Apache 、 Nginx 等服務器:注意啦,我發起的是Websocket協議,快點幫我找到對應的助理處理。

   Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==

   Sec-WebSocket-Protocol: chat, superchat

   Sec-WebSocket-Version: 13

  首先, Sec-WebSocket-Key 是一個 Base64 encode 的值,這個是瀏覽器隨機生成的,告訴服務器:驗證是否是真的是Websocke     t助理。

  而後, Sec_WebSocket-Protocol 是一個用戶定義的字符串,用來區分同URL下,不一樣的服務所須要的協議。

  最後, Sec-WebSocket-Version 是告訴服務器所使用的 Websocket Draft (協議版本)。

  而後服務器會返回下列東西,表示已經接受到請求, 成功創建Websocket啦!

  HTTP/1.1 101 Switching Protocols

  Upgrade: websocket

  Connection: Upgrade

  Sec-WebSocket-Accept:HSmrc0sMlYUkAGmm5OPpG2HaGWk=        Sec-WebSocket-Protocol: chat

  這裏開始就是HTTP最後負責的區域了,告訴客戶端已經成功切換協議

  Upgrade: websocket

  Connection: Upgrade

  依然是固定的,告訴客戶端即將升級的是 Websocket 協議,而不是mozillasocket,lurnarsocket或者shitsocket。

而後, Sec-WebSocket-Accept 這個則是通過服務器確認,而且加密事後的 Sec-WebSocket-Key 。 服務器:返回ID CARD來證實。

後面的, Sec-WebSocket-Protocol 則是表示最終使用的協議。

  至此,HTTP已經完成它全部工做了,接下來就是徹底按照Websocket協議進行了。具體的協議就不在這闡述了。

  關注GoEasy WebSocket 簡單開發不迷路。

相關文章
相關標籤/搜索