加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > C语言 > 正文

HTTP到websocket的协议升级

发布时间:2020-12-15 00:15:08 所属栏目:C语言 来源:网络整理
导读:HTTP VS Websocket 实际上websocket协议和http是两个完全不想相关的协议,但是由于 之前HTTP已经大量普及,为了兼容之前的东西,websocket采用了一些HTTP存在的东西,比如握手规则等. Websocket的协议升级过程 客户端发起一个头部包含协议升级请求的请求,请求头

HTTP VS Websocket

实际上websocket协议和http是两个完全不想相关的协议,但是由于 之前HTTP已经大量普及,为了兼容之前的东西,websocket采用了一些HTTP存在的东西,比如握手规则等.

Websocket的协议升级过程

  1. 客户端发起一个头部包含协议升级请求的请求,请求头部为大概是这样

    GET /chat HTTP/1.1
    Host: server.example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
    Sec-WebSocket-Protocol: chat,superchat
    Sec-WebSocket-Version: 13
    Origin: http://example.com
    
    这样的一个请求告诉服务器,我需要一个websocket的服务,而不是Http. 
    与普通的HTTP请求相比,他有两个东西不一样: Connection,Upgrade 并且多了三个字段: key,protocol,version.
    前面提到,websocket跟HTTP有交叉的地方,这里的连接建立方式就是一个共同点,都是发起一个请求的时候,通过三次握手建立TCP传输通道,然后发送请求,接收响应.
    

    Key是浏览器确认服务器已经转换为websocket服务的凭证,这个key在后边还会用到.
    protocol暂时省略... 待补充.
    Version表示websocket的版本,因为一开始websocket只是一个草案,所以实现起来大相径庭. 为了能让协议更好地工作,就需要确定版本号.

  2. 服务器返回101状态码,表示协议升级成功. 返回相应头部大概是这样:

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
    Sec-WebSocket-Protocol: chat
    
    Accept字段用于服务类型确认,这个字段是利用了客户端发来的key,加上一个'魔幻字符串',再经过SHA-1加密,最后经过base-64编码的一个十六进制字符串.
    用于让浏览器确认,现在为其提供的服务是能处理websocket服务提供者.
    
  3. 连接建立完成

断开websocket连接.

待补充

学习笔记,纯新手一个,谨防坑.

参考资料

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读