Zum Hauptinhalt springen

3. Das Alt-Svc HTTP Header-Feld

Ein HTTP(S)-Ursprungsserver kann Clients die Verfügbarkeit alternativer Dienste ankündigen, indem er Antworten ein Alt-Svc Header-Feld hinzufügt.

Alt-Svc       = clear / 1#alt-value
clear = %s"clear"; "clear", Groß-/Kleinschreibung beachten
alt-value = alternative *( OWS ";" OWS parameter )
alternative = protocol-id "=" alt-authority
protocol-id = token ; prozentcodierter ALPN-Protokollname
alt-authority = quoted-string ; enthaltend [ uri-host ] ":" port
parameter = token "=" ( token / quoted-string )

Der Feldwert besteht entweder aus einer Liste von Werten, von denen jeder einen alternativen Dienst angibt, oder aus dem Schlüsselwort "clear".

Ein Feldwert, der den speziellen Wert "clear" enthält, zeigt an, dass der Ursprung anfordert, dass alle Alternativen für diesen Ursprung ungültig gemacht werden (einschließlich der in derselben Antwort angegebenen, im Falle einer ungültigen Antwort, die sowohl "clear" als auch alternative Dienste enthält).

ALPN-Protokollnamen sind Oktettsequenzen ohne zusätzliche Formatbeschränkungen. Oktette, die in Token nicht erlaubt sind ([RFC7230], Abschnitt 3.2.6), MÜSSEN gemäß Abschnitt 2.1 von [RFC3986] prozentcodiert werden. Folglich MUSS das Oktett, das das Prozentzeichen "%" darstellt (hex 25), ebenfalls prozentcodiert werden.

Um genau eine Möglichkeit zur Darstellung eines beliebigen ALPN-Protokollnamens zu haben, gelten die folgenden zusätzlichen Einschränkungen:

  1. Oktette im ALPN-Protokollnamen DÜRFEN NICHT prozentcodiert werden, wenn es sich um gültige Token-Zeichen außer "%" handelt, und
  2. Bei der Verwendung von Prozentcodierung MÜSSEN Großbuchstaben für Hexadezimalziffern verwendet werden.

Mit diesen Einschränkungen können Empfänger einen einfachen Zeichenfolgenvergleich anwenden, um Protokollbezeichner abzugleichen.

Die "alt-authority"-Komponente besteht aus einem OPTIONALEN uri-host ("host" in Abschnitt 3.2.2 von [RFC3986]), einem Doppelpunkt (":") und einer Portnummer.

Zum Beispiel:

Alt-Svc: h2=":8000"

Dies zeigt das "h2"-Protokoll ([RFC7540]) auf demselben Host unter Verwendung des angegebenen Ports 8000 an.

Ein Beispiel mit einem Hostwechsel:

Alt-Svc: h2="new.example.org:80"

Dies zeigt das "h2"-Protokoll auf dem Host "new.example.org" an, der auf Port 80 läuft. Beachten Sie, dass die "quoted-string"-Syntax verwendet werden muss, da ":" kein zulässiges Zeichen in "token" ist.

Beispiele für das Escaping von Protokollnamen:

ALPN Protokollnameprotocol-idHinweis
h2h2Kein Escaping erforderlich
w=x:y#zw%3Dx%3Ay#z"=" und ":" escaped
x%yx%25y"%" muss escaped werden

Alt-Svc KANN in jeder HTTP-Antwortnachricht vorkommen, unabhängig vom Statuscode. Beachten Sie, dass Empfänger von Alt-Svc das Header-Feld ignorieren können (und dies in einigen Situationen tun müssen; siehe Abschnitte 2.1 und 6).

Der Alt-Svc Feldwert kann mehrere Werte haben:

Alt-Svc: h2="alt.example.com:8000", h2=":443"

Wenn mehrere Werte vorhanden sind, spiegelt die Reihenfolge der Werte die Präferenz des Servers wider (wobei der erste Wert die am meisten bevorzugte Alternative ist).

Der/die von Alt-Svc beworbene(n) Wert(e) können von Clients verwendet werden, um eine neue Verbindung zu einem alternativen Dienst zu öffnen. Nachfolgende Anforderungen können diese neue Verbindung sofort verwenden oder die bestehende Verbindung weiter verwenden, während die neue Verbindung erstellt wird.

Bei der Verwendung von HTTP/2 ([RFC7540]) SOLLTEN Server stattdessen einen ALTSVC-Frame senden (Abschnitt 4). Ein einzelner ALTSVC-Frame kann für eine Verbindung gesendet werden; ein neuer Frame ist nicht für jede Anforderung erforderlich. Beachten Sie, dass trotz dieser Empfehlung Alt-Svc Header-Felder in über HTTP/2 gelieferten Antworten gültig bleiben.

Auf jeden "alt-value" folgt eine OPTIONALE, durch Semikolons getrennte Liste zusätzlicher Parameter, wobei jeder solcher "Parameter" einen Namen und einen Wert umfasst.

Diese Spezifikation definiert zwei Parameter: "ma" und "persist", definiert in Abschnitt 3.1. Unbekannte Parameter MÜSSEN ignoriert werden. Das heißt, die Werte (alt-value), in denen sie vorkommen, MÜSSEN so verarbeitet werden, als wäre der unbekannte Parameter nicht vorhanden.

Neue Parameter können in Erweiterungsspezifikationen definiert werden (siehe Abschnitt 7.3 für Registrierungsdetails).

Beachten Sie, dass alle Feldelemente, die die "quoted-string"-Syntax zulassen, gemäß Abschnitt 3.2.6 von [RFC7230] verarbeitet werden MÜSSEN.

3.1. Caching von Alt-Svc Header-Feldwerten

Wenn ein alternativer Dienst mit Alt-Svc beworben wird, gilt er für 24 Stunden ab Generierung der Nachricht als frisch. Dies kann mit dem Parameter "ma" (max-age) geändert werden.

Syntax:

ma = delta-seconds; siehe [RFC7234], Abschnitt 1.2.1

Der delta-seconds-Wert gibt die Anzahl der Sekunden seit der Generierung der Antwort an, für die der alternative Dienst als frisch gilt.

Alt-Svc: h2=":443"; ma=3600

Siehe Abschnitt 4.2.3 von [RFC7234] für Details zur Bestimmung des Antwortalters.

Zum Beispiel eine Antwort:

HTTP/1.1 200 OK
Content-Type: text/html
Cache-Control: max-age=600
Age: 30
Alt-Svc: h2=":8000"; ma=60

zeigt an, dass ein alternativer Dienst verfügbar ist und für die nächsten 60 Sekunden verwendet werden kann. Die Antwort wurde jedoch bereits 30 Sekunden lang zwischengespeichert (gemäß dem Age Header-Feldwert); daher ist der alternative Dienst nur 30 Sekunden ab Empfang dieser Antwort frisch, abzüglich der geschätzten Transitzeit.

Beachten Sie, dass die Frische-Lebensdauer für HTTP-Caching (hier 600 Sekunden) das Caching von Alt-Svc-Werten nicht beeinflusst.

Wenn ein Alt-Svc Antwort-Header-Feld von einem Ursprung empfangen wird, macht sein Wert alle zwischengespeicherten alternativen Dienste für diesen Ursprung ungültig und ersetzt sie.

Standardmäßig werden zwischengespeicherte alternative Dienste gelöscht, wenn der Client eine Netzwerkänderung feststellt. Alternative Dienste, die langlebiger sein sollen (z. B. solche, die nicht spezifisch für das Client-Zugriffsnetzwerk sind), können den "persist"-Parameter mit einem Wert von "1" als Hinweis darauf tragen, dass der Dienst möglicherweise über eine Netzwerkkonfigurationsänderung hinaus nützlich ist.

Syntax:

persist = "1"

Zum Beispiel:

Alt-Svc: h2=":443"; ma=2592000; persist=1

Diese Spezifikation definiert nur einen einzigen Wert für "persist". Clients MÜSSEN "persist"-Parameter mit anderen Werten als "1" ignorieren.

Siehe Abschnitt 2.2 für allgemeine Anforderungen an das Caching alternativer Dienste.