3. Link Serialisation in HTTP Headers (Link-Serialisierung in HTTP-Headern)
Das Link-Entity-Headerfeld bietet eine Möglichkeit, einen oder mehrere Links in HTTP-Headern zu serialisieren. Es ist semantisch äquivalent zum HTML-Element <link>.
Link-Headerfeld-Syntax
Link = #link-value
link-value = "<" URI-Reference ">" *( OWS ";" OWS link-param )
link-param = token BWS [ "=" BWS ( token / quoted-string ) ]
3.1. Link Target (Link-Ziel)
Jeder link-value übermittelt einen Link. Das Link-Ziel wird durch die URI-Reference in spitzen Klammern (< und >) dargestellt.
3.2. Link Context (Link-Kontext)
Standardmäßig ist der Kontext eines Links der effektive Anfrage-URI (Effective Request URI) der Nachricht, in der er erscheint, wie in Abschnitt 5.5 von [RFC7230] definiert.
Wenn vorhanden, wird der Kontext durch die Ziel-IRI bestimmt. Beachten Sie, dass jede IRI gemäß Abschnitt 2 in einen URI umgewandelt werden muss, um im Link-Headerfeld dargestellt zu werden.
3.3. Relation Type (Relationstyp)
Der Link-Relationstyp wird durch den Wert des „rel"-Parameters identifiziert, dessen Wert MUSS eines der folgenden enthalten:
- einen registrierten Relationstyp-Namen (siehe Abschnitt 2.1.1), oder
- einen Erweiterungs-Relationstyp (siehe Abschnitt 2.1.2)
Registrierte Relationstyp-Namen und Erweiterungs-Relationstypen können im selben „rel"-Parameterwert verwendet werden, getrennt durch ein oder mehrere Leerzeichen.
relation-type = reg-rel-type / ext-rel-type
reg-rel-type = LOALPHA *( LOALPHA / DIGIT / "." / "-" )
ext-rel-type = URI
Beachten Sie, dass Erweiterungs-Relationstypen als URIs kodiert sind; das bedeutet, dass alle reservierten Zeichen gemäß Abschnitt 2 von [RFC3986] prozentual kodiert werden müssen.
3.4. Target Attributes (Zielattribute)
Die Zielattribute eines Links werden im link-value als link-param dargestellt.
3.4.1. Serialisation-Defined Attributes (Serialisierungsdefinierte Attribute)
Der „rel"-Parameter MUSS vorhanden sein, DARF ABER NICHT mehrfach erscheinen; wenn er fehlt oder mehrfach erscheint, ist der gesamte link-value ungültig.
Ebenso MUSS der „anchor"-Parameter (falls vorhanden) nur einmal erscheinen; wenn er mehrfach erscheint, ist der gesamte link-value ungültig.
Weitere häufige Zielattribute sind:
- hreflang: Gibt die Sprache der Zielressource an. Der Wert MUSS [RFC5646] entsprechen.
- media: Gibt das beabsichtigte Anzeigemedium der Zielressource an. Der Wert MUSS [W3C.REC-css3-mediaqueries-20120619] entsprechen.
- title: Ein menschenlesbarer Bezeichner zur Kennzeichnung der Zielressource.
- title*: Internationalisierte Version des „title"-Parameters mit der in [RFC8187] definierten Kodierung.
- type: Gibt einen Hinweis auf den Medientyp der Zielressource.
3.4.2. Extension Attributes (Erweiterungsattribute)
Andere link-param-Werte sind Erweiterungs-Zielattribute, die von Link-Relationstypen oder Link-Anwendungen definiert und verwendet werden können.
Das Vorhandensein oder Fehlen von Erweiterungs-Zielattributen SOLLTE den link-value nicht ungültig machen, KANN aber seine Verwendung in bestimmten Anwendungen beeinflussen.
3.5. Link Header Field Examples (Link-Headerfeld-Beispiele)
Zum Beispiel:
Link: <http://example.com/TheBook/chapter2>; rel="previous";
title="previous chapter"
Gibt an, dass das „vorherige Kapitel" unter http://example.com/TheBook/chapter2 zu finden ist.
Link: </>; rel="http://example.net/foo"
Gibt an, dass die Stammressource ("/") mit dem benutzerdefinierten Erweiterungs-Relationstyp „http://example.net/foo" in Beziehung steht.
Link: </terms>; rel="copyright"; anchor="#foo"
Gibt an, dass die Copyright-Ressource für die Ressource mit dem Bezeichner „foo" unter /terms zu finden ist.
Mehrere Links können in einem einzigen Link-Headerfeld übermittelt werden:
Link: </TheBook/chapter2>; rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>; rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel
Hier verwenden beide Links den internationalisierten title-Parameter.
Es können auch mehrere Link-Headerfelder verwendet werden:
Link: </TheBook/chapter2>; rel="previous"
Link: </TheBook/chapter4>; rel="next"