当我使用chrome创建一个新的websocket
new WebSocket('ws://gert:passwd@127.0.0.1:8001/dbname')
nodejs服务器收到
GET /dbname HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: 127.0.0.1:8001
Origin: http://127.0.0.1:8000
Sec-WebSocket-Key1: ' 5 5) 4 1e a9 9 0 19
Sec-WebSocket-Key2: 3000909100 Q
如何检索gert和passwd?
似乎chrome确实没有在ws头中传递基本认证数据。为什么不把login/pwd作为url查询字符串的一部分?(并使用安全wss)
Authorization
头在WebSocket规范中直到Hybi-13才被提及。Chrome实现了hybi-00和hybi-10(取决于Chrome的版本),所以它不是实现的要求。
既然协议中提到了它,也许Google会实现它,但我不能保证放上"user:pass@..."在URI中必须是这样做的,它可能需要更改浏览器的WebSocket API。
Chrome未将授权标头作为升级请求的一部分传递。导致身份验证失败。
这个问题似乎在最新的chromium中得到了修复。
SSL
我在Quora上找到了这个链接。
我同意你可以使用SSL并将这些凭据作为第一条消息发送。
socket . io
也可以使用socket。IO也有websockets传输来做授权
Chrome使用websocket连接发送cookie。如果你有一个会话cookie,你可以使用会话cookie来识别发起websocket连接的用户。