3. Link Serialisation in HTTP Headers (Sérialisation des liens dans les en-têtes HTTP)
Le champ d'en-tête d'entité Link fournit un moyen de sérialiser un ou plusieurs liens dans des en-têtes HTTP. Il est sémantiquement équivalent à l'élément <link> de HTML.
Syntaxe du champ d'en-tête Link
Link = #link-value
link-value = "<" URI-Reference ">" *( OWS ";" OWS link-param )
link-param = token BWS [ "=" BWS ( token / quoted-string ) ]
3.1. Link Target (Cible de lien)
Chaque link-value véhicule un lien. La cible du lien est indiquée par la URI-Reference entre chevrons (< et >).
3.2. Link Context (Contexte de lien)
Par défaut, le contexte d'un lien est l'URI de requête effective (Effective Request URI) représentant le message dans lequel il apparaît, telle que définie à la section 5.5 de [RFC7230].
Lorsqu'il est présent, le contexte est déterminé par l'IRI cible. Notez que tout IRI DOIT être converti en URI conformément à la section 2 pour être représenté dans le champ d'en-tête Link.
3.3. Relation Type (Type de relation)
Le type de relation de lien est identifié par la valeur du paramètre « rel », dont la valeur DOIT (MUST) contenir l'un des éléments suivants :
- un nom de type de relation enregistré (voir section 2.1.1), ou
- un type de relation étendu (voir section 2.1.2)
Les noms de types de relation enregistrés et les types de relation étendus peuvent être utilisés dans la même valeur de paramètre « rel », séparés par un ou plusieurs espaces.
relation-type = reg-rel-type / ext-rel-type
reg-rel-type = LOALPHA *( LOALPHA / DIGIT / "." / "-" )
ext-rel-type = URI
Notez que les types de relation étendus sont encodés en tant qu'URI ; cela signifie que tout caractère réservé doit être encodé en pourcentage conformément à la section 2 de [RFC3986].
3.4. Target Attributes (Attributs de cible)
Les attributs de cible d'un lien sont représentés sous forme de link-param dans la link-value.
3.4.1. Serialisation-Defined Attributes (Attributs définis par la sérialisation)
Le paramètre « rel » DOIT (MUST) être présent, mais NE DOIT PAS (MUST NOT) apparaître plusieurs fois ; s'il est absent ou apparaît plusieurs fois, la link-value entière est invalide.
De même, le paramètre « anchor » (s'il est présent) DOIT (MUST) n'apparaître qu'une seule fois ; s'il apparaît plusieurs fois, la link-value entière est invalide.
Les autres attributs de cible courants comprennent :
- hreflang : indique la langue de la ressource cible. La valeur DOIT (MUST) être conforme à [RFC5646].
- media : indique le média d'affichage prévu pour la ressource cible. La valeur DOIT (MUST) être conforme à [W3C.REC-css3-mediaqueries-20120619].
- title : identifiant lisible par l'homme pour étiqueter la ressource cible.
- title* : version internationalisée du paramètre « title » utilisant l'encodage défini dans [RFC8187].
- type : fournit une indication sur le type de médias de la ressource cible.
3.4.2. Extension Attributes (Attributs étendus)
Les autres valeurs de link-param sont des attributs de cible étendus, pouvant être définis et utilisés par des types de relation de lien ou des applications de liens.
La présence ou l'absence d'attributs de cible étendus NE DEVRAIT PAS (SHOULD NOT) invalider la link-value, mais PEUT (MAY) affecter son utilisation dans des applications particulières.
3.5. Link Header Field Examples (Exemples de champ d'en-tête Link)
Par exemple :
Link: <http://example.com/TheBook/chapter2>; rel="previous";
title="previous chapter"
indique que le « chapitre précédent » se trouve à http://example.com/TheBook/chapter2.
Link: </>; rel="http://example.net/foo"
indique que la ressource racine (« / ») est liée au type de relation étendu personnalisé « http://example.net/foo ».
Link: </terms>; rel="copyright"; anchor="#foo"
indique que la ressource de copyright pour la ressource identifiée par « foo » se trouve à /terms.
Plusieurs liens peuvent être véhiculés dans un seul champ d'en-tête Link :
Link: </TheBook/chapter2>; rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>; rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel
Ici, les deux liens utilisent le paramètre title internationalisé.
Il est également possible d'utiliser plusieurs champs d'en-tête Link :
Link: </TheBook/chapter2>; rel="previous"
Link: </TheBook/chapter4>; rel="next"