Heim > Web-Frontend > js-Tutorial > Wie kann ich benutzerdefinierte HTTP-Header, z. B. Autorisierung, zu einer WebSocket-Client-Verbindung in JavaScript hinzufügen?

Wie kann ich benutzerdefinierte HTTP-Header, z. B. Autorisierung, zu einer WebSocket-Client-Verbindung in JavaScript hinzufügen?

Patricia Arquette
Freigeben: 2024-11-30 08:13:14
Original
665 Leute haben es durchsucht

How Can I Add Custom HTTP Headers, Such as Authorization, to a WebSocket Client Connection in JavaScript?

HTTP-Header in der WebSocket-Client-API

Verwenden Sie einen beliebigen HTTP-Header-Client, der diese Funktion unterstützt, um die HTTP-Header anzupassen. Es scheint einfach zu sein, einen hinzuzufügen WebSocket-Client, aber ich kann nicht finden, wie ich das mit der WebSocket-API der Netzwerkplattform machen kann.

Weiß jemand, wie man es umsetzt?

var ws = new WebSocket("ws://example.com/service");
Nach dem Login kopieren

Insbesondere muss der HTTP-Autorisierungsheader gesendet werden können.

Aktualisiert

  • Kurze Antwort: Nein, es können nur die Pfad- und Protokollfelder angegeben werden.
  • Lange Antwort:

Es gibt keine Methode in der JavaScript-WebSockets-API, um zusätzliche Header anzugeben, die der Client/Browser sendet. Im WebSocket-Konstruktor können der HTTP-Pfad („GET /xyz“) und der Protokollheader („Sec-WebSocket-Protocol“) angegeben werden.

Der Sec-WebSocket-Protocol-Header (manchmal erweitert für die Verwendung in der WebSocket-spezifischen Authentifizierung) ist von WebSocket abgeleitet Das optionale zweite Argument für den Konstruktor generiert:

var ws = new WebSocket("ws://example.com/path", "protocol");
var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);
Nach dem Login kopieren

Der obige Code führt zu den folgenden Headern:

Sec-WebSocket-Protocol: protocol
Nach dem Login kopieren

und

Sec-WebSocket-Protocol: protocol1, protocol2
Nach dem Login kopieren

implementieren WebSocket A Common Das Muster für die Authentifizierung/Autorisierung besteht darin, ein Ticketsystem zu implementieren, bei dem die Seite, die den WebSocket-Client hostet, ein Ticket vom Server anfordert, der dann gesendet wird Dieses Ticket wird beim Verbindungsaufbau übergeben, entweder in der URL/Abfragezeichenfolge, im Protokollfeld oder durch Angabe als erste Nachricht nach dem Verbindungsaufbau. Der Server lässt die Verbindung dann nur dann weiter, wenn das Ticket gültig ist (existiert, wurde nicht verwendet, die im Ticket kodierte Client-IP stimmt überein, der Zeitstempel im Ticket ist neuer, etc.). Im Folgenden finden Sie eine Zusammenfassung der WebSocket-Sicherheitsinformationen: https://devcenter.heroku.com/articles/websocket-security.

Früher war die Basisauthentifizierung eine Option, diese ist jedoch veraltet und moderne Browser senden diesen Header nicht, selbst wenn er angegeben ist.

Grundlegende Authentifizierungsinformationen (veraltet – nicht mehr funktionsfähig):

Der Autorisierungsheader besteht aus den Feldern Benutzername und Passwort (oder nur Benutzername) aus dem WebSocket-URI. Generiert:

var ws = new WebSocket("ws://username:password@")
Nach dem Login kopieren

Der obige Code wird mit base64 generiert Codieren Sie den folgenden Header für die Zeichenfolge „Benutzername:Passwort“:

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Nach dem Login kopieren

Die Basisauthentifizierung wurde in Chrome 55 und Firefox 50 getestet und bestätigt, dass die Informationen zur Basisauthentifizierung tatsächlich mit dem Server ausgehandelt werden (dies funktioniert möglicherweise nicht). auf Safari).

Vielen Dank an Dmitry Frank für die Antwort zur Basisauthentifizierung.

Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte HTTP-Header, z. B. Autorisierung, zu einer WebSocket-Client-Verbindung in JavaScript hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage