如何为 webSocket javascript 设置 cookie 标头?



我正在尝试打开具有 kerberos 身份验证的服务器的 websocket,握手时发生错误(错误代码:400); 我看到无法通过网络套接字发送凭据,我要做的就是通过网络套接字cookie设置用户名和密码,服务器将读取它们。 那么如何为网络套接字设置 cookie 呢? 谢谢

这取决于浏览器。 如果 cookie 与初始 HTTP 请求一起到达以启动 WebSocket 连接,您可以实现处理 cookie,但如果您不能要求用户使用 Safari(它使用 WebSocket 打开请求发送 cookie)而不是 Chrome(它没有),您可能必须实现一种机制,让客户端在带内发送会话标识符。

实现此目的的一种简单方法是,客户端代码将会话标识符作为响应open事件的第一条消息发送,服务器代码将第一条传入消息的内容解释为会话 Cookie,以设置适当的权限上下文(或者,如果 Cookie 未知或未向其持有者授予任何权限,则可能关闭连接)。

或者,如果您的 WebSocket 协议具有某种结构化消息基础结构,则可以定义用于将会话 cookie 传递给服务器的特定消息类型,以及服务器的匹配响应类型,以使客户端知道它对 cookie 的看法。

在URI 参数中传递会话 cookie 可能很诱人,如ws://example.com/service?SESSION=123456. 这在原型设计中可能已经足够了,但在生产中可能不明智,因为会话 cookie 通常应被视为比处理从 Web 服务器请求的 URI 列表的习惯更敏感。 以这种方式传递会话 cookie 可以在短期内起作用,但可能会通过粗心的分析技术增加其意外暴露的风险。 在其他一些上下文中,可以通过在请求正文中传递敏感标识符(例如,作为所谓的POST参数)来缓解此问题,但 WebSocket 打开请求不能具有非空正文。

您可以像设置常规 cookie 一样为 webSocket 连接设置 cookie,使用document.cookie = xxxx. 所有 webSocket 连接都以 HTTP 请求(带有升级标头)开头,并且您连接到的域的 cookie 将与该初始 HTTP 请求一起发送以打开 webSocket。

因此,只要您正在与网页相同的域进行 webSocket 连接,那么您只需为该网页设置一个 cookie,它就会与 webSocket 连接请求一起发送。 而且,与其他 cookie 一样,您可以使用 MDN 上描述的document.cookie来设置 cookie。

相关内容

  • 没有找到相关文章

最新更新