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");
Plus précisément, vous devez pouvoir envoyer l'en-tête d'autorisation HTTP.
Mise à jour
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"]);
Le code ci-dessus donne les en-têtes suivants :
Sec-WebSocket-Protocol: protocol
et
Sec-WebSocket-Protocol: protocol1, protocol2
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@")
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=
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!