美文网首页
WebSocket 笔记

WebSocket 笔记

作者: FrankFan | 来源:发表于2016-12-28 08:04 被阅读34次

WebSocket 笔记

  • WebSocket 握手
    客户端请求
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==
一段被 base64 编码的内容,这段内容解码后是 the sample nonce

服务器返回

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
将客户端传来的 Sec-WebSocket-Key 加上固定的 GUID "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" 之后用 SHA-1 (非对称加密)进行哈希,在采用 base64 编码。
这段 GUID 是固定的,所有的 websocket 都采用这个RFC 文档中说用它是因为 "unlikely to be used by network endpoints that do not understand the WebSocket Protocol"。

  • 帧格式
      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-------+-+-------------+-------------------------------+
     |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
     |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
     |N|V|V|V|       |S|             |   (if payload len==126/127)   |
     | |1|2|3|       |K|             |                               |
     +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
     |     Extended payload length continued, if payload len == 127  |
     + - - - - - - - - - - - - - - - +-------------------------------+
     |                               |Masking-key, if MASK set to 1  |
     +-------------------------------+-------------------------------+
     | Masking-key (continued)       |          Payload Data         |
     +-------------------------------- - - - - - - - - - - - - - - - +
     :                     Payload Data continued ...                :
     + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
     |                     Payload Data continued ...                |
     +---------------------------------------------------------------+
  • 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 将来自客户端的 Sec-WebSocket-Key 加上这个 GUID 然后 SHA-1 加密,之后进行 BASE64 编码,将结果作为 “Sec-WebSocket-Accept” 返回客户端。 GUID 一定是 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 这个数。
  • 一个单个帧的没有进行掩码的文本消息 0x81 0x05 0x48 0x65 0x6c 0x6c 0x6f(消息内容为 “Hello”)
    0x81 1000 0001 未分片的消息只有一帧,所以FIN是1, 因为没有扩展RSV1 RSV2 RSV3 都是0 ,因为这是一个文本帧,所以opcode 是 1。
    0x05 0000 01001 没有用掩码,所以 第一位 mask 是0,所以是 0000, hello 是 占 5个字节,所以是1001

相关文章

  • WebSocket 笔记

    WebSocket 笔记 WebSocket 握手客户端请求 Sec-WebSocket-Key: dGhlIHN...

  • webSocket笔记

    什么是webSocket? WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯...

  • WebSocket笔记

    WebSocket是HTML5支持的一种TCP协议,特点是支持服务端和客户端双向通讯。 WebSocket是TCP...

  • 2021-08-14_websocket前后端通讯学习笔记

    20210814_websocket前后端通讯学习笔记 1概述 代码github地址: https://githu...

  • 2021-08-15_NettyWebsocketServer协

    20210815_NettyWebsocketServer协议学习笔记2 1概述 WebSocket是为了解决HT...

  • websocket学习笔记

    websocket是H5的新内容,是一个持久化的协议,我们可以使用它进行一些实时互动。 特点 (1)建立在 TCP...

  • websocket学习笔记

    websocket websocket是web传递消息的一种协议。web传递消息的方式主要有轮询(polling)...

  • webSocket学习笔记

    webSocket是HTMI5提供的一种单个tcp链接上进行全双 工通讯的协议。一般为了实现推送技术,我们现在使用...

  • WebSocket长连接

    为了不让ajax一直发请求,为了节约资源,用了WebSocket,来做一下笔记:

  • Express4.x + Websocket(ws) + Ses

    笔记内容: express 服务器,搭载websocket服务器(用ws作为框架)并和 express 共享se...

网友评论

      本文标题:WebSocket 笔记

      本文链接:https://www.haomeiwen.com/subject/lvxyvttx.html