客户端未使用 websocket 协议:“连接”标头中未找到“升级”令牌

Ewa*_*Sou 13 https http go websocket gorilla

我正在使用 Gorilla Websocket 包来实现 websocket。

conn, err := upgrader.Upgrade(w, r, nil)

    if err != nil {
        // handle error
        fmt.Println(err)
    }
    defer conn.Close()
Run Code Online (Sandbox Code Playgroud)

我看到下面的错误

websocket:客户端未使用 websocket 协议:“连接”标头中未找到“升级”令牌

我打印在我的请求的标题上,我看到以下内容

conn, err := upgrader.Upgrade(w, r, nil)

    if err != nil {
        // handle error
        fmt.Println(err)
    }
    defer conn.Close()
Run Code Online (Sandbox Code Playgroud)

没有按预期升级 websocket 或连接升级

我相信我面临着与此完全相同的问题。

KIR*_*R B 8

如果您在虚拟机中部署 WS 服务器并希望默认情况下存在此标头,请更新您的 Nginx 配置文件,如下所示:

location /ws/ {
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
        proxy_set_header Upgrade websocket;
        proxy_set_header Connection Upgrade;
        proxy_pass         "http://127.0.0.1:8089";
    }
Run Code Online (Sandbox Code Playgroud)

proxy_set_header 升级websocket;proxy_set_header 连接升级;即使客户端尚未传递标头,也会为您完成这项工作。


eud*_*ore 3

浏览器js请求ws连接方法错误,正确的ws请求代码var ws = new WebSocket("ws://localhost:4747/ws");

一个正确的ws请求头,里面的每个头都是必须的,只是值不一样。

GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
Run Code Online (Sandbox Code Playgroud)