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连接.

待补充

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

参考资料

猜你在找的程序笔记相关文章