5. Il campo di intestazione Link
Il campo di intestazione di entità Link fornisce un mezzo per serializzare uno o più link nelle intestazioni HTTP. Esso è semanticamente equivalente all'elemento in HTML, nonché all'elemento atom:link a livello di feed 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. IRI di destinazione
Ogni link-value veicola un IRI di destinazione come URI-Reference (dopo la conversione in essa, se necessario; vedere [RFC3987], Sezione 3.1) racchiuso tra parentesi angolari ("<>"). Se l'URI-Reference è relativo, i parser devono (MUST) risolverlo secondo [RFC3986], Sezione 5. Si noti che qualsiasi IRI di base dal contenuto del messaggio non viene applicato.
5.2. IRI di contesto
Per impostazione predefinita, il contesto di un link veicolato nel campo di intestazione Link è l'IRI della risorsa richiesta.
Quando è presente, il parametro anchor lo sovrascrive con un altro URI, come un frammento di questa risorsa, o una terza risorsa (cioè, quando il valore di anchor è un URI assoluto). Se il valore del parametro anchor è un URI relativo, i parser devono (MUST) risolverlo secondo [RFC3986], Sezione 5. Si noti che qualsiasi URI di base dal contenuto del corpo non viene applicato.
Le implementazioni consumatrici possono scegliere di ignorare i link con un parametro anchor. Ad esempio, l'applicazione in uso potrebbe non consentire che l'IRI di contesto sia assegnato a una risorsa diversa. In tali casi, l'intero link deve essere ignorato; le implementazioni consumatrici non devono (MUST NOT) elaborare il link senza applicare l'anchor.
Si noti che, a seconda del codice di stato HTTP e delle intestazioni di risposta, l'IRI di contesto potrebbe essere "anonimo" (ovvero, nessun IRI di contesto è disponibile). Per esempio, questo è il caso di una risposta 404 a una richiesta GET.
5.3. Tipo di relazione
Il tipo di relazione di un link è veicolato nel valore del parametro "rel". Il parametro "rel" non deve (MUST NOT) comparire più di una volta in un dato link-value; le occorrenze dopo la prima devono (MUST) essere ignorate dai parser.
Il parametro "rev" è stato usato in passato per indicare che la semantica della relazione è in direzione inversa. Vale a dire, un link da A a B con REL="X" esprime la stessa relazione di un link da B ad A con REV="X". "rev" è deprecato da questa specifica perché spesso confonde autori e lettori; nella maggior parte dei casi è preferibile usare un tipo di relazione separato.
Si noti che i tipi di relazione di estensione sono tenuti (REQUIRED) a essere URI assoluti nelle intestazioni Link, e devono (MUST) essere racchiusi tra virgolette se contengono un punto e virgola (";") o una virgola (",") (poiché questi caratteri sono usati come delimitatori nell'intestazione stessa).
5.4. Attributi di destinazione
I link-param "hreflang", "media", "title", "title*", "type" e qualsiasi link-extension sono considerati attributi di destinazione per il link.
Il parametro "hreflang", quando presente, è un suggerimento che indica quale dovrebbe essere la lingua del risultato della dereferenziazione del link. Si noti che questo è solo un suggerimento; ad esempio, non sovrascrive l'intestazione Content-Language di una risposta HTTP ottenuta seguendo effettivamente il link. Più parametri "hreflang" su un singolo link-value indicano che più lingue sono disponibili dalla risorsa indicata. Il parametro "media", quando presente, è usato per indicare il mezzo o i mezzi di destinazione previsti per le informazioni di stile (vedere [W3C.REC-html401-19991224], Sezione 6.13). Si noti che questo potrebbe essere aggiornato da [W3C.CR-css3-mediaqueries-20090915]). Il suo valore deve (MUST) essere racchiuso tra virgolette se contiene un punto e virgola (";") o una virgola (","), e non deve (MUST NOT) esserci più di un parametro "media" in un link-value.
Il parametro "title", quando presente, è usato per etichettare la destinazione di un link in modo che possa essere usato come identificatore leggibile dall'uomo (ad esempio, una voce di menu) nella lingua indicata dall'intestazione Content-Language (se presente). Il parametro "title" non deve (MUST NOT) comparire più di una volta in un dato link-value; le occorrenze dopo la prima devono (MUST) essere ignorate dai parser.
Il parametro "title*" può essere usato per codificare questa etichetta in un insieme di caratteri diverso e/o per contenere informazioni sulla lingua secondo [RFC5987]. Il parametro "title*" non deve (MUST NOT) comparire più di una volta in un dato link-value; le occorrenze dopo la prima devono (MUST) essere ignorate dai parser. Se il parametro non contiene informazioni sulla lingua, la sua lingua è indicata dall'intestazione Content-Language (quando presente).
Se in un link-value compaiono sia il parametro "title" sia il parametro "title*", i processori dovrebbero (SHOULD) usare il valore del parametro "title*".
Il parametro "type", quando presente, è un suggerimento che indica quale dovrebbe essere il tipo di media del risultato della dereferenziazione del link. Si noti che questo è solo un suggerimento; ad esempio, non sovrascrive l'intestazione Content-Type di una risposta HTTP ottenuta seguendo effettivamente il link. Non deve (MUST NOT) esserci più di un parametro type in un link-value.
5.5. Esempi
Ad esempio:
Link: <http://example.com/TheBook/chapter2>; rel="previous";
title="previous chapter"
indica che "chapter2" precede questa risorsa in un percorso di navigazione logico.
Analogamente,
Link: </>; rel="http://example.net/foo"
indica che la risorsa radice ("/") è correlata a questa risorsa con il tipo di relazione di estensione "http://example.net/foo". L'esempio seguente mostra un'istanza dell'intestazione Link che codifica più link, e anche l'uso della codifica RFC 2231 per codificare sia caratteri non ASCII sia informazioni sulla lingua.
Link: </TheBook/chapter2>;
rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>;
rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel
Qui, entrambi i link hanno titoli codificati in UTF-8, usano la lingua tedesca ("de"), e il secondo link contiene il punto di codice Unicode U+00E4 ("LATIN SMALL LETTER A WITH DIAERESIS").
Si noti che i link-value possono veicolare più link tra gli stessi IRI di destinazione e di contesto; ad esempio:
Link: <http://example.org/>;
rel="start http://example.net/relation/other"
Qui, il link a "http://example.org/" ha il tipo di relazione registrato "start" e il tipo di relazione di estensione "http://example.net/relation/other".