[javascript] HTTP-Header in der WebSockets-Client-API



Answers

Das HTTP Authorization-Header-Problem kann folgendermaßen behoben werden:

var ws = new WebSocket("ws://username:password@example.com/service");

Dann wird ein korrekter Basic Authorization HTTP-Header mit dem angegebenen username und password . Wenn Sie Basic Authorization benötigen, sind Sie fertig.

Ich möchte jedoch Bearer , und ich griff auf den folgenden Trick zurück: Ich verbinde mich wie folgt mit dem Server:

var ws = new WebSocket("ws://my_token@example.com/service");

Und wenn mein Code auf der Server-Seite den Basic Authorization-Header mit einem nicht leeren Benutzernamen und einem leeren Passwort erhält, interpretiert er den Benutzernamen als Token.

Question

Sieht so aus, als ob es einfach ist, benutzerdefinierte HTTP-Header zu Ihrem Websocket-Client mit jedem HTTP-Header-Client hinzuzufügen, der dies unterstützt, aber ich kann nicht herausfinden, wie man das mit der JSON-API macht.

Es scheint jedoch, dass diese Header in der Spezifikation unterstützt werden sollten .

Jeder hat eine Ahnung, wie man es erreicht?

var ws = new WebSocket("ws://example.com/service");

Insbesondere muss ich einen HTTP-Autorisierungsheader senden können.




Völlig gehackt es so, dank Kanakas Antwort.

Klient:

var ws = new WebSocket(
    'ws://localhost:8080/connect/' + this.state.room.id, 
    store('token') || cookie('token') 
);

Server (in diesem Beispiel Koa2, sollte aber überall ähnlich sein):

var url = ctx.websocket.upgradeReq.url; // can use to get url/query params
var authToken = ctx.websocket.upgradeReq.headers['sec-websocket-protocol'];
// Can then decode the auth token and do any session/user stuff...



Sie können keine benutzerdefinierte Kopfzeile senden, wenn Sie eine WebSockets-Verbindung mit der JavaScript WebSockets-API herstellen möchten. Sie können Subprotocols Header verwenden, indem Sie den zweiten WebSocket-Klassenkonstruktor verwenden:

var ws = new WebSocket("ws://example.com/service", "soap");

und dann können Sie die Subprotocols-Header mit Sec-WebSocket-Protocol Schlüssel auf dem Server abrufen.

Es gibt auch eine Einschränkung, die Werte Ihrer Subprotocols-Header dürfen kein Komma ( , ) enthalten!






Links