En-tête Sec-WebSocket-Protocol
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 et de réponse HTTP Sec-WebSocket-Protocol est utilisé dans le WebSocket ouverture de la poignée de main pour négocier un sous-protocole à utiliser dans la communication.
Il peut s'agir d'un protocole bien compris, tel que SOAP ou WAMP, ou d'un protocole personnalisé compris par le client et le serveur.
Dans une requête, l'en-tête définit un ou plusieurs sous-protocoles WebSocket que l'application Web souhaite utiliser, par ordre de préférence. Ils peuvent être ajoutés en tant que valeurs de protocole dans plusieurs en-têtes, ou en tant que valeurs séparées par des virgules ajoutées à un seul en-tête.
Dans une réponse, il définit le sous-protocole sélectionné par le serveur. Il doit s'agir du premier sous-protocole que le serveur prend en charge dans la liste fournie dans l'en-tête de la requête.
L'en-tête de requête est automatiquement ajouté et rempli par le navigateur en utilisant les valeurs définies par l'application dans l'argument protocols de WebSocket().
Le sous-protocole sélectionné par le serveur est mis à la disposition de l'application Web dans WebSocket.protocol.
| Type d'en-tête | En-tête de requête, En-tête de réponse |
|---|---|
| En-tête de requête interdit | Oui (préfixe Sec-) |
Syntaxe
Sec-WebSocket-Protocol: <sub-protocols>
Directives
<sub-protocols>-
Une liste de noms de sous-protocoles séparés par des virgules, dans l'ordre de préférence. Les sous-protocoles peuvent être sélectionnés à partir du Registre des noms de sous-protocoles WebSocket de l'IANA (angl.), ou peuvent être un nom personnalisé compris conjointement par le client et le serveur.
En tant qu'en-tête de réponse, il s'agit d'un seul sous-protocole que le serveur a sélectionné.
Exemples
>Poignée de main d'ouverture du WebSocket
Le sous-protocole est défini dans la requête de poignée de main WebSocket originale.
La requête ci-dessous montre que le client préfère soap, mais prend également en charge wamp.
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Protocol: soap, wamp
La spécification des protocoles de cette manière a le même effet :
Sec-WebSocket-Protocol: soap
Sec-WebSocket-Protocol: wamp
La réponse du serveur inclut l'en-tête Sec-WebSocket-Protocol, sélectionnant le premier sous-protocole qu'il prend en charge parmi les préférences du client.
Ci-dessous, il est indiqué comme soap :
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: soap
Spécifications
| Spécification |
|---|
| The WebSocket Protocol> # section-11.3.4> |
Compatibilité des navigateurs
Voir aussi
- L'en-tête
Sec-WebSocket-Accept - L'en-tête
Sec-WebSocket-Key - L'en-tête
Sec-WebSocket-Version - L'en-tête
Sec-WebSocket-Extensions - La poignée de main du WebSocket et les sous-protocoles dans Écrire des serveurs WebSocket