是否可以检查WebSocket 403响应?

时间:2016-10-14 16:21:20

标签: javascript websocket

是否可以通过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回复,因此我可以提醒用户采取特殊措施。)

1 个答案:

答案 0 :(得分:2)

显然是it's deliberate

  

我的理解是,出于安全原因,WebSocket错误状态受到相当的限制,以限制恶意JS探测内部网络的能力。