我正在使用 Gorilla Websocket 包来实现一个 websocket。
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
// handle error
fmt.Println(err)
}
defer conn.Close()
我看到以下错误websocket:客户端未使用 websocket 协议(protocol):在“连接” header 中找不到“升级” token
我打印在我请求的标题上,我看到了下面的内容
Sec-Fetch-User ?1
Sec-Fetch-Dest document
Referer http://localhost:4747/home
Cookie myGoLiveCookie=369d99fa-901d-4b23-a64b-4731247de304
Sec-Ch-Ua "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"
Sec-Ch-Ua-Mobile ?0
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Sec-Fetch-Site same-origin
Accept-Encoding gzip, deflate, br
Upgrade-Insecure-Requests 1
Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Mode navigate
Accept-Language en-GB,en-US;q=0.9,en;q=0.8
Connection keep-alive
没有按预期升级 websocket 或连接升级我面临与 https://www.gitmemory.com/issue/gorilla/websocket/507/488770126 完全相同的问题
我相信。
有没有人有任何指示或可以指导我如何解决这个问题?
最佳答案
浏览器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
关于http - 客户端未使用 websocket 协议(protocol) : 'upgrade' token not found in 'Connection' header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65309160/