1. Einführung
HTTP [RFC7230] vermischt die Identifizierung von Ressourcen mit ihrem Standort. Mit anderen Worten, "http://" und "https://" URIs werden sowohl zum Benennen als auch zum Finden von Dingen verwendet, mit denen interagiert werden soll.
In einigen Fällen ist es wünschenswert, Identifizierung und Standort in HTTP zu trennen; d. h. denselben Bezeichner für eine Ressource beizubehalten, aber an einem anderen Ort im Netzwerk damit zu interagieren.
Zum Beispiel:
- Ein Ursprungsserver möchte einen Client möglicherweise auf einen anderen Server umleiten, wenn er überlastet ist, oder er hat einen Server gefunden, der sich näher am Standort des Clients befindet.
- Ein Ursprungsserver möchte möglicherweise den Zugriff auf seine Ressourcen über ein neues Protokoll anbieten, wie z. B. HTTP/2 [RFC7540], oder eines mit verbesserter Sicherheit, wie z. B. Transport Layer Security (TLS) [RFC5246].
- Ein Ursprungsserver möchte seine Clients möglicherweise zu betrieblichen Zwecken in Fähigkeitsgruppen einteilen, z. B. solche, die Server Name Indication (SNI) (Abschnitt 3 von [RFC6066]) unterstützen.
Diese Spezifikation definiert ein neues Konzept in HTTP, "Alternative Dienste" (Alternative Services), das es einem Ursprungsserver ermöglicht, zusätzliche Möglichkeiten zur Interaktion mit ihm im Netzwerk zu benennen. Sie definiert dafür in Abschnitt 2 einen allgemeinen Rahmen sowie spezifische Mechanismen, um ihre Existenz mithilfe von HTTP-Header-Feldern (Abschnitt 3) oder HTTP/2-Frames (Abschnitt 4) bekannt zu geben, sowie eine Möglichkeit anzuzeigen, dass ein alternativer Dienst verwendet wurde (Abschnitt 5).
Sie billigt auch den Statuscode 421 (Misdirected Request) (Abschnitt 6), den Ursprungsserver oder ihre benannten Alternativen verwenden können, um anzuzeigen, dass sie für einen bestimmten Ursprung nicht autoritativ sind, falls der falsche Standort verwendet wird.
1.1. Konventionen der Notation
Die Schlüsselwörter "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" und "OPTIONAL" in diesem Dokument sind so zu interpretieren, wie in [RFC2119] beschrieben.
Dieses Dokument verwendet die in [RFC5234] definierte und durch [RFC7405] aktualisierte erweiterte BNF zusammen mit der in Abschnitt 7 von [RFC7230] definierten "#rule"-Erweiterung. Die folgenden Regeln sind in [RFC5234], [RFC7230] und [RFC7234] definiert:
OWS = <OWS, siehe [RFC7230], Abschnitt 3.2.3>
delta-seconds = <delta-seconds; siehe [RFC7234], Abschnitt 1.2.1>
port = <port, siehe [RFC7230], Abschnitt 2.7>
quoted-string = <quoted-string, siehe [RFC7230], Abschnitt 3.2.6>
token = <token, siehe [RFC7230], Abschnitt 3.2.6>
uri-host = <uri-host, siehe [RFC7230], Abschnitt 2.7>