【发布时间】:2011-05-20 15:46:30
【问题描述】:
看起来很容易使用任何支持此功能的 HTTP 标头客户端将自定义 HTTP 标头添加到您的 websocket 客户端,但我找不到如何使用 JSON API 来做到这一点。
不过,好像应该支持these headers in the spec。
有人知道如何实现它吗?
var ws = new WebSocket("ws://example.com/service");
具体来说,我需要能够发送 HTTP 授权标头。
【问题讨论】:
-
我认为一个好的解决方案是允许 WebSocket 在未经授权的情况下连接,然后阻塞并等待服务器从 webSocket 接收授权,该 webSocket 将在其 onopen 事件中传输授权信息。
-
@Motes 的建议似乎是最合适的。从 onOpen 进行授权调用非常容易,它允许您根据授权响应接受/拒绝套接字。我最初尝试在 Sec-WebSocket-Protocol 标头中发送身份验证令牌,但感觉就像是 hack。
-
@Motes 嗨,你能解释一下“阻止并在服务器上等待”部分吗?你的意思是在有“auth”消息之前不要处理任何消息?
-
@Himal,是的,服务器设计在连接开始时不得发送数据或接受除授权之外的任何其他数据。
-
@Motes 感谢您的回复。我对阻塞部分有点困惑,因为据我了解,您无法阻止最初的
connect请求。我在后端使用 Django 通道,并且我将其设计为接受connect事件上的连接。然后它在receive事件中设置一个“is_auth”标志(如果它看到有效的身份验证消息)。如果未设置 is_auth 标志并且它不是身份验证消息,则它会关闭连接。
标签: javascript http header websocket