Aller au contenu principal

9. Extensions à HTTP/3 (Extensions to HTTP/3)

HTTP/3 permet l'extension du protocole. Dans les limites décrites dans cette section, les extensions de protocole peuvent être utilisées pour fournir des services supplémentaires ou modifier n'importe quel aspect du protocole. Les extensions ne sont effectives que dans le cadre d'une seule connexion HTTP/3.

Cela s'applique aux éléments de protocole définis dans ce document. Cela n'affecte pas les options existantes pour étendre HTTP, telles que la définition de nouvelles méthodes, codes d'état ou champs.

Les extensions sont autorisées à utiliser de nouveaux types de trames (Section 7.2), de nouveaux paramètres (Section 7.2.4.1), de nouveaux codes d'erreur (Section 8) ou de nouveaux types de flux unidirectionnels (Section 6.2). Des registres sont établis pour gérer ces points d'extension : types de trames (Section 11.2.1), paramètres (Section 11.2.2), codes d'erreur (Section 11.2.3) et types de flux (Section 11.2.4).

Les implémentations DOIVENT (MUST) ignorer les valeurs inconnues ou non supportées dans tous les éléments de protocole extensibles. Les implémentations DOIVENT (MUST) rejeter les données ou abandonner la lecture sur les flux unidirectionnels ayant des types inconnus ou non supportés. Cela signifie que n'importe lequel de ces points d'extension peut être utilisé en toute sécurité par les extensions sans arrangement ou négociation préalable. Cependant, lorsqu'un type de trame connu doit être dans un emplacement spécifique, tel que la trame SETTINGS comme première trame du flux de contrôle (voir Section 6.2.1), un type de trame inconnu ne satisfait pas cette exigence et DEVRAIT (SHOULD) être traité comme une erreur.

Les extensions qui pourraient modifier la sémantique des composants de protocole existants DOIVENT (MUST) être négociées avant d'être utilisées. Par exemple, une extension qui modifie la disposition de la trame HEADERS ne peut pas être utilisée jusqu'à ce que le pair ait donné un signal positif que cela est acceptable. Coordonner quand une telle disposition révisée entre en vigueur pourrait s'avérer complexe. En tant que tel, l'attribution de nouveaux identifiants pour de nouvelles définitions d'éléments de protocole existants est susceptible d'être plus efficace.

Ce document n'impose pas de méthode spécifique pour négocier l'utilisation d'une extension, mais il note qu'un paramètre (Section 7.2.4.1) pourrait être utilisé à cette fin. Si les deux pairs définissent une valeur qui indique la volonté d'utiliser l'extension, alors l'extension peut être utilisée. Si un paramètre est utilisé pour la négociation d'extension, la valeur par défaut DOIT (MUST) être définie de manière à ce que l'extension soit désactivée si le paramètre est omis.