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