是否可以通过403响应以编程方式检查WebSocket连接是否失败?例如,使用以下服务器代码:
package main
import (
"errors"
"io"
"log"
"net/http"
"golang.org/x/net/websocket"
)
func main() {
handler := websocket.Handler(func(ws *websocket.Conn) {
io.Copy(ws, ws)
})
handshake := func(conf *websocket.Config, req *http.Request) error {
if req.URL.Path == "/sekret" {
return nil
}
return errors.New("Oops!")
}
server := &websocket.Server{
Handshake: handshake,
Handler: handler,
}
log.Fatal(http.ListenAndServe(":8080", server))
}
以下示例JS连接触发403响应:
var ws = new WebSocket("ws://localhost:8080/something");
ws.onerror = console.log;
错误响应为Event
,类型为"error"
。另一方面,以下JS代码触发net::ERR_CONNECTION_REFUSED
(至少在Chrome上):
var ws = new WebSocket("ws://localhost:8081/something");
ws.onerror = console.log;
错误事件对象看起来几乎完全相同。有没有办法区分WebSocket连接中的错误类型和客户端? (我特意寻找403回复,因此我可以提醒用户采取特殊措施。)