En-tête Sec-WebSocket-Key
Baseline
Large disponibilité
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
L'en-tête de requête HTTP Sec-WebSocket-Key est utilisé dans le WebSocket ouverture de la poignée de main pour permettre à un client (agent utilisateur) de confirmer qu'il « veut vraiment » demander qu'un client HTTP soit mis à niveau pour devenir un WebSocket.
La valeur de la clé est calculée à l'aide d'un algorithme défini dans la spécification WebSocket, donc cela ne fournit pas de sécurité. Elle aide plutôt à empêcher les clients non WebSocket de demander par inadvertance, ou par mauvaise utilisation, une connexion WebSocket.
Cet en-tête est automatiquement ajouté par les agents utilisateurs lorsqu'un script ouvre un WebSocket ; il ne peut pas être ajouté en utilisant les méthodes fetch() ou XMLHttpRequest.setRequestHeader().
L'en-tête de réponse Sec-WebSocket-Accept du serveur doit inclure une valeur calculée à partir de la valeur de clé définie.
L'agent utilisateur peut alors valider cela avant de confirmer la connexion.
| Type d'en-tête | En-tête de requête |
|---|---|
| En-tête de requête interdit | Oui (préfixe Sec-) |
Syntaxe
Sec-WebSocket-Key: <key>
Directives
<key>-
La clé pour cette requête de mise à niveau. Il s'agit d'un nombre unique de 16 octets sélectionné au hasard, encodé en base64 et encodé de manière isomorphe. L'agent utilisateur l'ajoute lors de l'initialisation de la connexion WebSocket.
Exemples
Poignée de main d'ouverture du WebSocket
Le client initie une poignée de main WebSocket avec une requête comme suit.
Notez que cela commence comme une requête HTTP GET (HTTP/1.1 ou ultérieure), en plus de Sec-WebSocket-Key, la requête inclut l'en-tête Upgrade, indiquant l'intention de passer de HTTP à une connexion WebSocket.
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
La réponse du serveur doit inclure l'en-tête Sec-WebSocket-Accept avec une valeur calculée à partir de l'en-tête Sec-WebSocket-Key de la requête, et confirme l'intention de passer la connexion à une connexion WebSocket :
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Spécifications
| Spécification |
|---|
| The WebSocket Protocol # section-11.3.1 |
Compatibilité des navigateurs
Voir aussi
- L'en-tête
Sec-WebSocket-Accept - L'en-tête
Sec-WebSocket-Version - L'en-tête
Sec-WebSocket-Protocol - L'en-tête
Sec-WebSocket-Extensions - La poignée de main du WebSocket dans Écrire des serveurs WebSocket
- Mécanisme de mise à niveau du protocole HTTP