Passa al contenuto principale

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".