5. Das Link-Header-Feld
Das Link-Entity-Header-Feld bietet ein Mittel, um einen oder mehrere Links in HTTP-Headern zu serialisieren. Es ist semantisch äquivalent zum -Element in HTML sowie zum atom:link-Element auf Feed-Ebene in Atom [RFC4287].
Link = "Link" ":" #link-value
link-value = "<" URI-Reference ">" *( ";" link-param )
link-param = ( ( "rel" "=" relation-types )
| ( "anchor" "=" <"> URI-Reference <"> )
| ( "rev" "=" relation-types )
| ( "hreflang" "=" Language-Tag )
| ( "media" "=" ( MediaDesc | ( <"> MediaDesc <"> ) ) )
| ( "title" "=" quoted-string )
| ( "title*" "=" ext-value )
| ( "type" "=" ( media-type | quoted-mt ) )
| ( link-extension ) )
link-extension = ( parmname [ "=" ( ptoken | quoted-string ) ] )
| ( ext-name-star "=" ext-value )
ext-name-star = parmname "*" ; reserved for RFC2231-profiled
; extensions. Whitespace NOT
; allowed in between.
ptoken = 1*ptokenchar
ptokenchar = "!" | "#" | "$" | "%" | "&" | "'" | "("
| ")" | "*" | "+" | "-" | "." | "/" | DIGIT
| ":" | "<" | "=" | ">" | "?" | "@" | ALPHA
| "[" | "]" | "^" | "_" | "`" | "{" | "|"
| "}" | "~"
media-type = type-name "/" subtype-name
quoted-mt = <"> media-type <">
relation-types = relation-type
| <"> relation-type *( 1*SP relation-type ) <">
relation-type = reg-rel-type | ext-rel-type
reg-rel-type = LOALPHA *( LOALPHA | DIGIT | "." | "-" )
ext-rel-type = URI
5.1. Ziel-IRI
Jeder link-value übermittelt einen Ziel-IRI als URI-Reference (nach Umwandlung in eine solche, falls erforderlich; siehe [RFC3987], Abschnitt 3.1) innerhalb spitzer Klammern ("<>"). Wenn die URI-Reference relativ ist, müssen (MUST) Parser sie gemäß [RFC3986], Abschnitt 5, auflösen. Beachten Sie, dass ein etwaiger Basis-IRI aus dem Inhalt der Nachricht nicht angewendet wird.
5.2. Kontext-IRI
Standardmäßig ist der Kontext eines im Link-Header-Feld übermittelten Links der IRI der angeforderten Ressource.
Wenn vorhanden, überschreibt der Parameter anchor dies mit einem anderen URI, etwa einem Fragment dieser Ressource oder einer dritten Ressource (d. h., wenn der anchor-Wert ein absolutes URI ist). Wenn der Wert des Parameters anchor ein relatives URI ist, müssen (MUST) Parser ihn gemäß [RFC3986], Abschnitt 5, auflösen. Beachten Sie, dass ein etwaiger Basis-URI aus dem Inhalt des Bodys nicht angewendet wird.
Konsumierende Implementierungen können Links mit einem anchor-Parameter ignorieren. Beispielsweise erlaubt die verwendete Anwendung möglicherweise nicht, dass der Kontext-IRI einer anderen Ressource zugewiesen wird. In solchen Fällen ist der gesamte Link zu ignorieren; konsumierende Implementierungen dürfen (MUST NOT) den Link nicht verarbeiten, ohne den anchor anzuwenden.
Beachten Sie, dass der Kontext-IRI abhängig von HTTP-Statuscode und Antwort-Headern "anonym" sein kann (d. h., es ist kein Kontext-IRI verfügbar). Dies ist beispielsweise bei einer 404-Antwort auf eine GET-Anfrage der Fall.
5.3. Beziehungstyp
Der Beziehungstyp eines Links wird im Wert des Parameters "rel" übermittelt. Der Parameter "rel" darf (MUST NOT) in einem gegebenen link-value nicht mehr als einmal auftreten; Vorkommen nach dem ersten müssen (MUST) von Parsern ignoriert werden.
Der Parameter "rev" wurde in der Vergangenheit verwendet, um anzugeben, dass die Semantik der Beziehung in umgekehrter Richtung gilt. Das heißt, ein Link von A nach B mit REL="X" drückt dieselbe Beziehung aus wie ein Link von B nach A mit REV="X". "rev" ist durch diese Spezifikation als veraltet eingestuft, weil es Autoren und Leser häufig verwirrt; in den meisten Fällen ist die Verwendung eines separaten Beziehungstyps vorzuziehen.
Beachten Sie, dass Erweiterungs-Beziehungstypen in Link-Headern absolute URIs sein müssen (REQUIRED) und in Anführungszeichen gesetzt werden müssen (MUST), wenn sie ein Semikolon (";") oder Komma (",") enthalten (da diese Zeichen im Header selbst als Trennzeichen verwendet werden).
5.4. Zielattribute
Die Parameter "hreflang", "media", "title", "title*", "type" und alle link-extension-Parameter gelten als Zielattribute (target attributes) für den Link.
Der Parameter "hreflang" ist, wenn vorhanden, ein Hinweis darauf, welche Sprache das Ergebnis des Dereferenzierens des Links haben sollte. Beachten Sie, dass dies nur ein Hinweis ist; er überschreibt beispielsweise nicht den Content-Language-Header einer HTTP-Antwort, die durch tatsächliches Befolgen des Links erhalten wurde. Mehrere "hreflang"-Parameter in einem einzelnen link-value zeigen an, dass die angegebene Ressource in mehreren Sprachen verfügbar ist. Der Parameter "media" wird, wenn vorhanden, verwendet, um das beabsichtigte Ziel-Medium bzw. die Ziel-Medien für Stilinformationen anzugeben (siehe [W3C.REC-html401-19991224], Abschnitt 6.13). Beachten Sie, dass dies durch [W3C.CR-css3-mediaqueries-20090915] aktualisiert werden kann. Sein Wert muss (MUST) in Anführungszeichen gesetzt werden, wenn er ein Semikolon (";") oder Komma (",") enthält, und es darf (MUST NOT) nicht mehr als einen "media"-Parameter in einem link-value geben.
Der Parameter "title" wird, wenn vorhanden, verwendet, um das Ziel eines Links zu kennzeichnen, sodass er in der durch den Content-Language-Header angegebenen Sprache (falls vorhanden) als für Menschen lesbarer Bezeichner (z. B. ein Menüeintrag) verwendet werden kann. Der Parameter "title" darf (MUST NOT) in einem gegebenen link-value nicht mehr als einmal auftreten; Vorkommen nach dem ersten müssen (MUST) von Parsern ignoriert werden.
Der Parameter "title*" kann verwendet werden, um diese Kennzeichnung in einem anderen Zeichensatz zu kodieren und/oder gemäß [RFC5987] Sprachinformationen zu enthalten. Der Parameter "title*" darf (MUST NOT) in einem gegebenen link-value nicht mehr als einmal auftreten; Vorkommen nach dem ersten müssen (MUST) von Parsern ignoriert werden. Wenn der Parameter keine Sprachinformationen enthält, wird seine Sprache durch den Content-Language-Header angegeben (sofern vorhanden).
Wenn sowohl der Parameter "title" als auch "title*" in einem link-value erscheinen, sollten (SHOULD) Prozessoren den Wert des Parameters "title*" verwenden.
Der Parameter "type" ist, wenn vorhanden, ein Hinweis darauf, welchen Medien-Typ das Ergebnis des Dereferenzierens des Links haben sollte. Beachten Sie, dass dies nur ein Hinweis ist; er überschreibt beispielsweise nicht den Content-Type-Header einer HTTP-Antwort, die durch tatsächliches Befolgen des Links erhalten wurde. Es darf (MUST NOT) nicht mehr als einen type-Parameter in einem link-value geben.
5.5. Beispiele
Zum Beispiel:
Link: <http://example.com/TheBook/chapter2>; rel="previous";
title="previous chapter"
zeigt an, dass "chapter2" in einem logischen Navigationspfad vor dieser Ressource liegt.
Ebenso:
Link: </>; rel="http://example.net/foo"
zeigt an, dass die Wurzelressource ("/") über den Erweiterungs-Beziehungstyp "http://example.net/foo" mit dieser Ressource in Beziehung steht. Das folgende Beispiel zeigt einen Fall, in dem der Link-Header mehrere Links kodiert, sowie die Verwendung der RFC-2231-Kodierung, um sowohl Nicht-ASCII-Zeichen als auch Sprachinformationen zu kodieren.
Link: </TheBook/chapter2>;
rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>;
rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel
Hier haben beide Links in UTF-8 kodierte Titel, verwenden die deutsche Sprache ("de"), und der zweite Link enthält den Unicode-Codepunkt U+00E4 ("LATIN SMALL LETTER A WITH DIAERESIS").
Beachten Sie, dass link-values mehrere Links zwischen denselben Ziel- und Kontext-IRIs übermitteln können; zum Beispiel:
Link: <http://example.org/>;
rel="start http://example.net/relation/other"
Hier hat der Link zu "http://example.org/" den registrierten Beziehungstyp "start" und den Erweiterungs-Beziehungstyp "http://example.net/relation/other".