websocket 是獨立的、建立在 TCP 上的協定。
建立Websocket連線,需要通過瀏覽器發出請求,之後伺服器進行回應,
這個過程稱「交握」(handshaking)也是人稱的握手喔~
websocket 握手的典型格式如下(取自維基)
用戶端請求
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: http://example.com
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
Sec-WebSocket-Version: 13
伺服器回應
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=
Sec-WebSocket-Location: ws://example.com/
可以先記一下,因為之後實做的時候就可以看到這個握手格式的使用~
下面也是維基裡我覺得很重要的部分,
因為在實做都會看到這些應用,
包括用SHA1加密後再轉成base64編碼等等
(1)Connection必須設定Upgrade,表示用戶端希望連線升級。
(2)Upgrade欄位必須設定Websocket,表示希望升級到Websocket協定。
(3)Sec-WebSocket-Key是隨機的字串,伺服器端會用這些資料來構造出一個SHA-1的資訊摘要。把「Sec-WebSocket-Key」加上一個特殊字串「258EAFA5-E914-47DA-95CA-C5AB0DC85B11」,然後計算SHA-1摘要,之後進行BASE-64編碼,將結果做為「Sec-WebSocket-Accept」頭的值,返回給用戶端。這些操作,可以儘量避免普通HTTP請求被誤認為Websocket協定。
這三個是比較需要注意的地方,
今天是分享一些我在研究讀時的一些小資訊,
我們下次見~