3. WebSockets Upgrade over HTTP/3 (Mise à niveau WebSockets sur HTTP/3)
[RFC8441] définit un mécanisme pour exécuter le protocole WebSocket (WebSocket Protocol) [RFC6455] sur un seul flux d'une connexion HTTP/2. Il définit une méthode CONNECT étendue (Extended CONNECT method) qui spécifie un nouveau champ de pseudo-en-tête (pseudo-header field) « :protocol » et de nouvelles sémantiques pour les champs de pseudo-en-tête « :path » et « :authority ». Il définit également un nouveau paramètre HTTP/2 (setting) envoyé par un serveur pour permettre au client d'utiliser CONNECT étendu.
Les sémantiques des champs de pseudo-en-tête et du paramètre sont identiques à celles de HTTP/2 telles que définies dans [RFC8441]. L'annexe A.3 de [HTTP/3] exige que les paramètres HTTP/3 soient enregistrés séparément pour HTTP/3. La valeur SETTINGS_ENABLE_CONNECT_PROTOCOL est 0x08 (décimal 8), comme dans HTTP/2.
Si un serveur annonce la prise en charge de CONNECT étendu mais reçoit une demande CONNECT étendue avec une valeur « :protocol » inconnue ou non prise en charge, le serveur devrait (SHOULD) répondre à la demande avec un code d'état 501 (Not Implemented) (section 15.6.2 de [HTTP]). Un serveur peut (MAY) fournir plus d'informations via une réponse « détails du problème (problem details) » [RFC7807].
La fermeture de flux HTTP/3 (stream closure) est également analogue à la fermeture de connexion TCP de [RFC6455]. Les fermetures ordonnées au niveau TCP sont représentées par un bit FIN sur le flux (section 4.4 de [HTTP/3]). Les exceptions RST sont représentées par une erreur de flux (stream error) (section 8 de [HTTP/3]) de type H3_REQUEST_CANCELLED (section 8.1 de [HTTP/3]).