Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为WebSocket连接配置身份验证标头_Javascript_Http_Websocket - Fatal编程技术网

Javascript 为WebSocket连接配置身份验证标头

Javascript 为WebSocket连接配置身份验证标头,javascript,http,websocket,Javascript,Http,Websocket,IIUC,当我创建WebSocket时,会向指定的URL发送一个HTTP请求,其中包含一个升级请求。通常是将身份验证信息与此升级请求一起传递,还是单独执行 var websocket = new WebSocket("ws://domain:port/foo"); // Can I include authentication headers with the initial upgrade HTTP request? 没有定义任何特定于协议的客户端身份验证机制,但提到HTTP身份验证是一个可

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

var websocket = new WebSocket("ws://domain:port/foo"); // Can I include authentication headers with the initial upgrade HTTP request?
没有定义任何特定于协议的客户端身份验证机制,但提到HTTP身份验证是一个可能的选项:

10.5。WebSocket客户端身份验证

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

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


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

您应该通过web进行身份验证,返回一个cookie,然后再次连接到websocket服务器,拿着饼干。WS-server可以验证cookie


如果没有基于cookie的身份验证,或者这是不可能的(如另一个域中的WS-server),则您必须创建自己的登录请求-响应消息。

没有身份验证…@dandavis请澄清。当然认证头可以和升级请求一起发送-它是一个HTTP请求。。。http url是http url。也就是说,套接字包通常有义务捕获传入的连接,因此集成选项可能受到套接字主机的限制,但不受http的限制。您可以在最后重定向到套接字提供的http url,这样做很有意思。我明白了,所以WebSocket API没有提供直接的方法来配置随连接请求发送的http头?您需要深入了解您正在使用的任何服务器端WebSocket工具的文档,但不要抱太大希望。这就是说,让客户端通过套接字本身发送令牌非常容易,在它们发送令牌之前不会给它们任何数据,如果它们花费很长时间或做出错误猜测,就会删除它们。为什么不在WS-URL参数中传递会话ID呢?URL参数通常由代理记录。