WebSocket
原创地址:http://www.cnblogs.com/bnbqian/p/3708119.html
转载请注明出处
作为初学者,知道WebSocket 可以实现Web 的双向通讯就足够了。
想要知其然,知其所以然,就必须去看看相应的协议规定。因为WebSocket 是个比较新的概念,可以看到有从00 到17 到RFC 6455 的版本。http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-00 最新的目前是RFC 6455 的版本。http://tools.ietf.org/html/rfc6455
虽然说英文是必须的,但是作为快速入门的材料,有中文版本自然是极好的。这里是中文版的文档翻译地址。https://github.com/wen866595/open-doc/blob/master/rfc/RFC6455-cn.md。
请求如下所示:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
---------------------------------------------------------------------------------------------------------------------------
服务器端处理过程:
请求头:Sec-WebSocket-Key:
dGhlIHNhbXBsZSBub25jZQ==
取值,字符串拼接后得到:"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
;
SHA-1
后得到:0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90
0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4
0xea
Base64
后得到:s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
最后的结果值作为响应头
Sec-WebSocket-Accept
的值。
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
---------------------------------------------------------------------------------------------------------------------------
258EAFA5-E914-47DA-95CA-C5AB0DC85B11 是一个神奇的GUID.