HTTP1.1 和 HTTP2 服务器在响应 WebSocket 升级时有什么不同

注意:以下内容均为 deepseek 产出。

HTTP/1.1 和 HTTP/2 在响应 WebSocket 升级时的主要区别如下:

HTTP/1.1

  1. 升级机制:

    • 客户端发送 Upgrade: websocket 和 Connection: Upgrade 头字段的 HTTP/1.1 请求。

    • 服务器响应状态码 101 Switching Protocols,并包含相同的头字段,完成协议升级。

  2. 请求示例:

    GET /chat HTTP/1.1
    Host: example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Sec-WebSocket-Version: 13
    
  3. 响应示例:

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

HTTP/2

  1. 不支持直接升级:

    • HTTP/2 不支持通过 Upgrade 机制升级到 WebSocket,因为其设计基于二进制帧,与 HTTP/1.1 的文本协议不同。
  2. 扩展协议:

    • 使用 CONNECT 方法建立隧道,通过 :protocol 伪头字段指定 WebSocket 协议。

    • 客户端发送 CONNECT 请求,服务器响应 200 OK 后,双方在隧道内进行 WebSocket 通信。

  3. 请求示例:

    :method: CONNECT
    :protocol: websocket
    :scheme: https
    :path: /chat
    :authority: example.com
    sec-websocket-key: dGhlIHNhbXBsZSBub25jZQ==
    sec-websocket-version: 13
    
  4. 响应示例:

    :status: 200
    sec-websocket-accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=