WebSocket

作者: NapoleonY | 来源:发表于2019-05-24 19:51 被阅读0次

    概述

    WebSocket 协议被设计用来取代现有使用 HTTP 作为传输层的双向通信技术,并受益于现有的基础设施(代理、过滤、身份验证),协议包含两部分:握手,数据传输

    握手

    客户端申请 协议升级

    客户端发起协议升级请求,可以看到采用的是标准的 HTTP 报文格式,并且只支持 GET

    GET / HTTP/1.1
    Host: localhost:8080
    Origin: http://127.0.0.1:3000
    Connection: Upgrade // 协议升级
    Upgrade: websocket // 要升级到 WebSocket 协议
    Sec-WebSocket-Version: 13 // websocket 的版本。如果服务端不支持该版本,需要返回一个 Sec-WebSocket-Versionheader ,里面包含服务端支持的版本号
    Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw== // 确保服务器不接受来自非 WebSocket客户端的连接,与后面服务端响应首部的 Sec-WebSocket-Accept 是配套的,提供基本的防护,比如恶意的连接,或者无意的连接
    
    响应协议升级
    HTTP/1.1 101 Switching Protocols
    Connection:Upgrade
    Upgrade: websocket
    Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU= // 根据客户端请求首部的 Sec-WebSocket-Key 计算出来
    

    数据帧

    WebSocket 最小的通信单位为 帧(frame)


    屏幕快照 2019-05-24 17.26.12.png

    opcode:操作代码,决定了如何解析后续的 data payload

    数据传递

    问题

    1. 与 TCP、HTTP 的关系
      WebSocket 是基于 TCP 的独立的协议,只是通过 HTTP 进行握手
      HTTP 发送 Request ,必须有对应的 Response,而且 Response 是被动的,Websocket 数据格式轻量,开销小,

    未完待续

    参考

    1. WebSocket 详解
    2. 图解 HTTP

    相关文章

      网友评论

          本文标题:WebSocket

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