javascript - WebSocket 和 HTTP header

标签 javascript go browser websocket http-headers

我正在尝试弄清楚如何在建立 WebSocket 连接后将带有授权 token 的 header 添加到它。基本上,使用 cookie 来验证连接中的每条消息。

HTTP headers in Websockets client API 上有很好的讨论已经,但它并没有真正帮助我。

建议之一:

document.cookie = 'X-Authorization=' + token + '; path=/';

不幸的是,它对我没有帮助。

func handler(ws *websocket.Conn, h *Hub) {
    go h.run()
    h.addClientChan <- ws
    for {
        config := ws.Config()
        fmt.Println("Headers length:", len(config.Header))
        ...

在我添加 cookie 之前和之后显示一个包含 0 个元素的 map 。

是否可以在连接建立后更改 WebSocket 连接 header ?

我什至需要向 WebSocket 连接添加授权 token ,前提是我每次都进行身份验证,还是它只对重新建立连接有用,而只是事后无用的检查?

最佳答案

Is it possible to alter WebSocket connection headers, after the connection has been established?

您不能在收到 WebSocket 消息后设置 cookie。一旦建立了 WebSocket 连接,它就是一个开放的 TCP 套接字并且协议(protocol)不再是 http,因此没有内置的方式来交换 cookie。

您可以在第一个 http 请求上使用 authorizathion,双方建立协议(protocol)以交换数据。

关于javascript - WebSocket 和 HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57140691/

相关文章:

go - 如果函数将 slice 的元素复制到变量,它是使用指向该元素的指针还是副本?

android - 当链接也通过深度链接重定向时在浏览器中打开

javascript - CoffeeScript:可以重写得更简洁吗?

javascript - jQuery 创建一个带有 href 属性的

javascript - 响应 View 中 React Slick Slider 的宽度错误

google-app-engine - 从 Go on AppEngine 中的 init() 函数获取 URL

http - Go Web 服务器的进程管理

html - Internet Explorer 的 future

css - 最后一行在 GridView 中未正确显示

javascript - 将值传递给 JQuery 中的函数和变量范围