zoukankan      html  css  js  c++  java
  • webSocket基本知识

    webSocket是基于TCP的一种协议,与HTTP一样是应用层协议。

    webSocket有以下几个特点:

    1. 基于TCP,服务端比较容易实现。
    2. 与HTTP协议有着良好的兼容性。默认端口也是80或443。握手阶段使用http协议,因此握手不容易被屏蔽,
    能通过各种HTTP代理服务器。
    3. 数据格式轻量,性能开销小,通信高效。
    4. 可发送文本,也可发送二进制数据。
    5. 没有同源限制,客户端可以与任何服务器通信,可以同webSocket实现跨域通信
    6. 协议标识符是ws(加密的话,则是wss),服务器网址就是URL

    1. webSocket的握手

    1.1 首先是TCP三次握手,略

    1.2 发送http请求,携带升级头

    GET /chat HTTP/1.1
    Host: server.example.com
    Connection: Upgrade
    Upgrade: websocket
    Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
    Sec-WebSocket-Protocol: chat, superchat
    Sec-WebSocket-Version: 13
    Origin: http://example.com

    有5项是webSocket的:

    其中

    Connection: Upgrade
    Upgrade: websocket

    表明协议升级,升级为websocket协议。

    Sec-WebSocket-Key: key表示一个base64加密的密钥
    Sec-WebSocket-Protocol: protocol表示客户端和服务端想使用哪种子协议
    Sec-WebSocket-Version: version表示是websocket的哪个版本

    1.3 服务器http响应

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

    服务端的响应状态码是101,表示使用HTTP协议的101状态进行协议切换。

    响应包含4个webSocket的头

    其中同样包含连接升级2个头

    Connection: Upgrade
    Upgrade: websocket

    Sec-WebSocket-Accept头表示服务接受升级,同意使用webSocket。

    accept后面的key是客户端的key与一个固定的GUID拼接后,sha1哈希,再base64编码而来。
    其中固定的GUID是一个Magic Sting。如下:

    Base64(sha1(client Sec-WebSocket-key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'))

    客户端收到Sec-WebSocket-Accept后,将本地的Sec-WebSocket-Key进行同样的编码,然后比对,一致就开始通信。

  • 相关阅读:
    哪种可以让程序员赚到更多钱?
    layer 弹框 很好用 页面交互不好弄!!!父子弹框的交互!
    博客导航
    扯淡扯着扯着就远了----关键字;宁静致远
    高驰涛——裸奔到北京的程序猿
    TP5分页类使用——超级简单好用
    七牛云同步资源工具使用说明
    短链接实现原理和简单调用
    抓包工具Charles下载地址及Charles配置https
    敲代码的少年
  • 原文地址:https://www.cnblogs.com/mengff/p/12905650.html
Copyright © 2011-2022 走看看