是的,WebSocket 可以携带 cookie。WebSocket 与 HTTP 不同,它有其自己的协议,因此不能像 HTTP 那样使用 Set-Cookie 等头字段设置 cookie。但是,可以在 WebSocket 握手期间通过 HTTP 请求头中的 Cookie 字段传递 cookie。
在客户端握手请求中,在请求头部分设置COOKIE字段:
Sec-WebSocket-Protocol: chat, superchat
Cookie: name=value; name2=value2
在服务端可以通过 http.Request.Header.Get("Cookie")
获取到 cookie 的值。
注意,要使用相同主机、端口和协议来发出 WebSocket 握手请求和实际 WebSocket 数据,以便浏览器将 cookie 传递给服务器。如果您使用不同的主机、端口或协议,您可能会遇到与跨站点请求一样的安全问题,也就是在不同协议下产生的 CORS 问题。