iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 19
0
自我挑戰組

挑戰30天完成PHP聊天室範例系列 第 19

[Day19]第十八章-聊天室開頭的閒聊(三)-websocket交握協定

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協定。

這三個是比較需要注意的地方,
今天是分享一些我在研究讀時的一些小資訊,
我們下次見~


上一篇
[Day18]第十七章-聊天室開頭的閒聊(二)-php websocket函數
下一篇
[Day20]第十九章-盤古開天(七)-WEBSOCKET SERVER端(1)
系列文
挑戰30天完成PHP聊天室範例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言