WebSocket協議與抓包
阿新 • • 發佈:2019-10-13
WebSocket協議
WebSocket並不是全新的協議,而是利用了HTTP協議來建立連線,它的目的是在瀏覽器和伺服器之間建立一個不受限的雙向通訊的通道,比如說,伺服器可以在任意時刻傳送訊息給瀏覽器
WebSocket連線必須由瀏覽器發起,因為請求協議是一個標準的HTTP請求,格式如下:
GET ws://localhost:3000/ws/chat HTTP/1.1 Host: localhost Upgrade: websocket Connection: Upgrade Origin: http://localhost:3000 Sec-WebSocket-Key: client-random-string Sec-WebSocket-Version: 13
該請求和普通的HTTP請求有幾點不同:
- GET請求的地址不是類似/path/,而是以ws://開頭的地址;
- 請求頭Upgrade: websocket和Connection: Upgrade表示這個連線將要被轉換為WebSocket連線;
- Sec-WebSocket-Key是用於標識這個連線,並非用於加密資料;
- Sec-WebSocket-Version指定了WebSocket的協議版本
隨後,伺服器如果接受該請求,就會返回如下響應:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: server-random-string
該響應程式碼101
表示本次連線的HTTP協議即將被更改,更改後的協議就是Upgrade: websocket
指定的WebSocket協議。
版本號和子協議規定了雙方能理解的資料格式,以及是否支援壓縮等等。如果僅使用WebSocket的API,就不需關心這些
HTTP協議、WebSocket協議與TCP協議的關係
HTTP協議是建立在TCP協議之上的,TCP協議本身就實現了全雙工通訊,但是HTTP協議的請求-應答機制限制了全雙工通訊。WebSocket連線建立以後,其實只是簡單規定了一下:接下來,咱們通訊就不使用HTTP協議了,直接互相發資料吧。
安全的WebSocket連線機制和HTTPS類似。首先,瀏覽器用wss://xxx建立WebSocket連線時,會先通過HTTPS建立安全的連線,然後,該HTTPS連線升級為WebSocket連線,底層通訊走的仍然是安全的SSL/TLS協議
fiddler抓取WebSocket資料
fiddler
中雙擊WebSocket Session
即可檢視此連線收發的資料
&n