9. Erweiterungen zu HTTP/3 (Extensions to HTTP/3)
HTTP/3 erlaubt die Erweiterung des Protokolls. Innerhalb der in diesem Abschnitt beschriebenen Grenzen können Protokollerweiterungen verwendet werden, um zusätzliche Dienste bereitzustellen oder jeden Aspekt des Protokolls zu ändern. Erweiterungen sind nur im Rahmen einer einzelnen HTTP/3-Verbindung wirksam.
Dies gilt für die in diesem Dokument definierten Protokollelemente. Dies hat keinen Einfluss auf die bestehenden Optionen zur Erweiterung von HTTP, wie z. B. die Definition neuer Methoden, Statuscodes oder Felder.
Erweiterungen dürfen neue Frame-Typen (Abschnitt 7.2), neue Einstellungen (Abschnitt 7.2.4.1), neue Fehlercodes (Abschnitt 8) oder neue unidirektionale Stream-Typen (Abschnitt 6.2) verwenden. Register werden zur Verwaltung dieser Erweiterungspunkte eingerichtet: Frame-Typen (Abschnitt 11.2.1), Einstellungen (Abschnitt 11.2.2), Fehlercodes (Abschnitt 11.2.3) und Stream-Typen (Abschnitt 11.2.4).
Implementierungen MÜSSEN (MUST) unbekannte oder nicht unterstützte Werte in allen erweiterbaren Protokollelementen ignorieren. Implementierungen MÜSSEN (MUST) Daten verwerfen oder das Lesen auf unidirektionalen Streams abbrechen, die unbekannte oder nicht unterstützte Typen haben. Dies bedeutet, dass jeder dieser Erweiterungspunkte sicher von Erweiterungen ohne vorherige Vereinbarung oder Verhandlung verwendet werden kann. Wenn jedoch ein bekannter Frame-Typ an einem bestimmten Ort erforderlich ist, wie z. B. der SETTINGS-Frame als erster Frame des Kontrollstreams (siehe Abschnitt 6.2.1), erfüllt ein unbekannter Frame-Typ diese Anforderung nicht und SOLLTE (SHOULD) als Fehler behandelt werden.
Erweiterungen, die die Semantik bestehender Protokollkomponenten ändern könnten, MÜSSEN (MUST) vor ihrer Verwendung ausgehandelt werden. Beispielsweise kann eine Erweiterung, die das Layout des HEADERS-Frames ändert, nicht verwendet werden, bis der Peer ein positives Signal gegeben hat, dass dies akzeptabel ist. Die Koordinierung, wann ein solches überarbeitetes Layout in Kraft tritt, könnte sich als komplex erweisen. Daher ist es wahrscheinlich effektiver, neue Identifikatoren für neue Definitionen bestehender Protokollelemente zuzuweisen.
Dieses Dokument schreibt keine spezifische Methode zur Aushandlung der Verwendung einer Erweiterung vor, weist jedoch darauf hin, dass eine Einstellung (Abschnitt 7.2.4.1) für diesen Zweck verwendet werden könnte. Wenn beide Peers einen Wert setzen, der die Bereitschaft zur Verwendung der Erweiterung anzeigt, kann die Erweiterung verwendet werden. Wenn eine Einstellung für die Erweiterungsaushandlung verwendet wird, MUSS (MUST) der Standardwert so definiert werden, dass die Erweiterung deaktiviert ist, wenn die Einstellung weggelassen wird.