Maison > interface Web > js tutoriel > Comment puis-je ajouter des en-têtes HTTP personnalisés, tels qu'une autorisation, à une connexion client WebSocket en JavaScript ?

Comment puis-je ajouter des en-têtes HTTP personnalisés, tels qu'une autorisation, à une connexion client WebSocket en JavaScript ?

Patricia Arquette
Libérer: 2024-11-30 08:13:14
original
644 Les gens l'ont consulté

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

En-têtes HTTP dans l'API client WebSocket

Utilisez n'importe quel client d'en-tête HTTP prenant en charge cette fonctionnalité pour personnaliser les en-têtes HTTP Il semble facile d'ajouter un Client WebSocket, mais je ne trouve pas comment procéder en utilisant l'API WebSocket de la plateforme réseau.

Quelqu'un sait comment le mettre en œuvre ?

var ws = new WebSocket("ws://example.com/service");
Copier après la connexion

Plus précisément, vous devez pouvoir envoyer l'en-tête d'autorisation HTTP.

Mise à jour

  • Réponse courte : Non, seuls les champs de chemin et de protocole peuvent être spécifiés.
  • Réponse longue :

Il n'existe aucune méthode dans l'API JavaScript WebSockets pour spécifier des en-têtes supplémentaires que le client/navigateur enverra. Le chemin HTTP ("GET /xyz") et l'en-tête du protocole ("Sec-WebSocket-Protocol") peuvent être spécifiés dans le constructeur WebSocket.

L'en-tête Sec-WebSocket-Protocol (parfois étendu pour être utilisé dans l'authentification spécifique à WebSocket) est dérivé de WebSocket Le deuxième argument facultatif du constructeur génère :

var ws = new WebSocket("ws://example.com/path", "protocol");
var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);
Copier après la connexion

Le code ci-dessus donne les en-têtes suivants :

Sec-WebSocket-Protocol: protocol
Copier après la connexion

et

Sec-WebSocket-Protocol: protocol1, protocol2
Copier après la connexion

implémentent WebSocket Un commun Le modèle d'authentification/autorisation consiste à implémenter un système de tickets, dans lequel la page hébergeant le client WebSocket demande un ticket au serveur, qui est ensuite Ce ticket est transmis lors de l'établissement de la connexion, soit dans l'URL/chaîne de requête, dans le champ du protocole, soit en le spécifiant comme premier message après l'établissement de la connexion. Le serveur n'autorisera alors la poursuite de la connexion que si le ticket est valide (existe, n'a pas été utilisé, l'IP client codée dans le ticket correspond, l'horodatage du ticket est plus récent, etc.). Ce qui suit est un résumé des informations de sécurité de WebSocket : https://devcenter.heroku.com/articles/websocket-security.

L'authentification de base était autrefois une option, mais elle est obsolète et les navigateurs modernes n'enverront pas cet en-tête même s'il est spécifié.

Informations d'authentification de base (obsolètes - ne fonctionnent plus) :

L'en-tête d'autorisation est le nom d'utilisateur et le mot de passe (ou simplement le nom d'utilisateur) de l'URI WebSocket généré :

var ws = new WebSocket("ws://username:password@")
Copier après la connexion

Le code ci-dessus est généré en base64 Encodez l'en-tête suivant pour la chaîne "username:password" :

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Copier après la connexion

L'authentification de base a été testée dans Chrome 55 et Firefox 50 et vérifié que les informations d'authentification de base sont bien négociées avec le serveur (cela peut ne pas fonctionner sur Safari).

Merci à Dmitry Frank pour la réponse d'authentification de base.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal