配置WebSocket连接的身份验证标头

Ben*_*Ben 3 javascript http websocket

IIUC,当我创建WebSocket时,会将HTTP请求发送到指定的URL,其中包含升级请求。通常是将身份验证信息与此升级请求一起传递,还是应该单独执行?

var websocket = new WebSocket("ws://domain:port/foo"); // Can I include authentication headers with the initial upgrade HTTP request?
Run Code Online (Sandbox Code Playgroud)

Phi*_*ipp 5

所述的WebSocket RFC标准没有定义任何特定协议的客户机认证机制,但提到HTTP认证是一种可能的选择:

10.5。WebSocket客户端身份验证

该协议没有规定服务器在WebSocket握手期间可以对客户端进行身份验证的任何特定方式。WebSocket
服务器可以使用
通用HTTP服务器可用的任何客户端身份验证机制,例如cookie,HTTP身份验证或TLS
身份验证。

http URL的标准规定了一种形式,该形式包括URL中的登录凭据。形式是http://username:password@www.example.com/file。但是并非所有浏览器都支持此语法,因为坦率地说,这是一个非常糟糕的主意。

WebSocket API没有公开旨在用于HTTP客户端身份验证的任何功能。这意味着Web浏览器应该以通常的方式提供身份验证:使用上面的URL语法(当他们决定支持它时)或通过向用户显示输入登录凭据的弹出窗口。