RFC 5988
Web Linking
Web Linking ππ
Okay bestie, this is RFC 5988, the Web Linking spec, and it's giving main character energy πβ¨. M. Nottingham wrote it in October 2010. It's a Standards Track document, which means the IETF community reviewed it and approved it for publication π. It also updates 4287 ([RFC4287]), so it changes parts of the Atom spec. The ISSN is 2070-1721, and the Request for Comments number is 5988 π¦.
Abstract β¨
This document is all about relation types for Web links. It sets up a registry for them too π. It also explains how to use these links in HTTP headers with the Link header field π.
Status of This Memo π
This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc5988.
Copyright Notice Β©οΈ
Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.
Table of Contents ποΈ
1. Introduction ....................................................3
2. Notational Conventions ..........................................3
3. Links ...........................................................4
4. Link Relation Types .............................................5
4.1. Registered Relation Types ..................................5
4.2. Extension Relation Types ...................................6
5. The Link Header Field ...........................................6
5.1. Target IRI .................................................7
5.2. Context IRI ................................................7
5.3. Relation Type ..............................................8
5.4. Target Attributes ..........................................8
5.5. Examples ...................................................9
6. IANA Considerations ............................................10
6.1. Link HTTP Header Registration .............................10
6.2. Link Relation Type Registry ...............................10
6.2.1. Registering New Link Relation Types ................11
6.2.2. Initial Registry Contents ..........................12
6.3. Link Relation Application Data Registry ...................16
7. Security Considerations ........................................17
8. Internationalisation Considerations ............................18
9. References .....................................................18
9.1. Normative References ......................................18
9.2. Informative References ....................................19
Appendix A. Notes on Using the Link Header with the HTML4
Format ...............................................21
Appendix B. Notes on Using the Link Header with the Atom
Format ...............................................22
Appendix C. Acknowledgements .....................................23
1. Introduction πΈ
The web has had a way to show how resources relate to each other, and what kind of relationship it is, for a long time. HTML has it [W3C.REC-html401-19991224], and more recently Atom has it [RFC4287]. These two are conceptually similar, but they're specified separately π€. Links between resources don't actually need to be format specific, though. Typed links that don't depend on how they're serialised are super useful, especially when a resource has representations in multiple formats π.
So this document sets up a framework for typed links that isn't tied to one particular serialisation or application π¦. It does this by redefining the link relation registry that Atom established so it has a broader domain, and then adding the relations that HTML defines to it π .
An HTTP header field for conveying typed links was defined in Section 19.6.2.4 of [RFC2068]. It was removed from [RFC2616] because there wasn't enough implementation experience yet π. Since then, some User Agents have implemented it anyway (stylesheets, for example), and several new use cases have popped up β¨.
Because it got removed, nobody was totally sure what the status of the Link header was. So some people were like "let's just mint new application-specific HTTP headers" instead of reusing it π. This document fixes that by re-specifying the Link header as one such serialisation, with updated syntax that's still backwards-compatible π«Ά.
2. Notational Conventions π
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14, [RFC2119], as scoped to those conformance targets.
This document uses the Augmented Backus-Naur Form (ABNF) notation of [RFC2616], and explicitly includes the following rules from it: quoted-string, token, SP (space), LOALPHA, DIGIT.
Additionally, the following rules are included from [RFC3986]: URI and URI-Reference. From [RFC4288] we get type-name and subtype-name. From [W3C.REC-html401-19991224] we get MediaDesc. From [RFC5646] we get Language-Tag. And from [RFC5987] we get ext-value and parmname π.
3. Links π
In this specification, a link is a typed connection between two resources that are identified by Internationalised Resource Identifiers (IRIs) [RFC3987]. A link is made up of:
- A context IRI,
- a link relation type (Section 4),
- a target IRI, and
- optionally, target attributes.
A link can be viewed as a statement of the form "{context IRI} has a {relation type} resource at {target IRI}, which has {target attributes}". Cute, right? π₯°
Note that in the common case, the context IRI will also be a URI [RFC3986], because many protocols (such as HTTP) don't support dereferencing IRIs. Likewise, the target IRI will be converted to a URI (see [RFC3987], Section 3.1) in serialisations that don't support IRIs (e.g., the Link header).
This specification doesn't put any restrictions on the cardinality of links. There can be multiple links to and from a particular IRI, and multiple links of different types between two given IRIs π. Likewise, the relative ordering of links in any particular serialisation, or between serialisations (e.g., the Link header and in-content links), is not specified or significant in this specification. Applications that want to treat ordering as significant can do so π.
Target attributes are a set of key/value pairs that describe the link or its target, like a media type hint. This specification doesn't try to coordinate their names or use, but it does provide common target attributes for use in the Link HTTP header π§.
Finally, this specification doesn't define a general syntax for expressing links, and it doesn't mandate a specific context for any given link. Serialisations of links are expected to specify both aspects. One such serialisation is communication of links through HTTP headers, which is specified in Section 5 π.
4. Link Relation Types π
In the simplest case, a link relation type identifies the semantics of a link. For example, a link with the relation type "copyright" tells you that the resource at the target IRI is a statement of the copyright terms that apply to the current context IRI π.
Link relation types can also be used to say that the target resource has particular attributes or shows particular behaviours. For example, a "service" link implies that the identified resource is part of a defined protocol (in this case, a service description) π οΈ.
Relation types are not to be confused with media types [RFC4288]. They don't identify the format of the representation that results when the link is dereferenced. They only describe how the current context is related to another resource π .
Relation types SHOULD NOT infer any additional semantics based upon the presence or absence of another link relation type, or its own cardinality of occurrence. The one exception is the combination of the "alternate" and "stylesheet" registered relation types, which has special meaning in HTML4 for historical reasons π.
There are two kinds of relation types: registered and extension β¨.
4.1. Registered Relation Types π
Well-defined relation types can be registered as tokens for convenience and/or to promote reuse by other applications. This specification establishes an IANA registry of such relation types, which you can find in Section 6.2 ποΈ.
Registered relation type names MUST conform to the reg-rel-type rule, and MUST be compared character-by-character in a case-insensitive fashion. They SHOULD be appropriate to the specificity of the relation type. In other words, if the semantics are highly specific to a particular application, the name should reflect that, so that more general names are still available for less specific use π―.
Registered relation types MUST NOT constrain the media type of the context IRI, and MUST NOT constrain the available representation media types of the target IRI. However, they can specify the behaviours and properties of the target resource (e.g., allowable HTTP methods, or request and response media types that must be supported) π¦.
Specific applications of linking may also need extra data to be included in the registry. For example, Web browsers might want to know what kinds of links should be downloaded when they archive a Web page. If this application-specific information is in the registry, new link relation types can control this behaviour without unnecessary coordination π«Ά.
To make that work, per-entry application data can be added to the Link Relation Type registry by registering it in the Link Relation Application Data registry (Section 6.3) πΈ.
4.2. Extension Relation Types β¨
okay so, if you don't want to register a relation type, you can just use an extension relation type π¦ It's a URI [RFC3986] that uniquely identifies the relation type. The URI can point at a resource that explains what the relation means, but clients SHOULD NOT automatically go fetch that resource, because nobody wants to overburden the server π«Ά
When extension relation types get compared, they MUST be compared as strings (after converting to URIs if they're serialised in a different format, like a Curie [W3C.CR-curie-20090116]). The comparison is case-insensitive and goes character-by-character π That's why all-lowercase URIs SHOULD be used for extension relations. Lowkey the easiest way to avoid drama π
Also, extension relation types have to be URIs, but a serialisation of links can say it's expressed in another form, as long as that form can be converted to URIs π
5. The Link Header Field π
The Link entity-header field is how you serialise one or more links in HTTP headers π It's semantically equivalent to the <LINK> element in HTML, and to the atom:link feed-level element in Atom [RFC4287]. Literally the same energy across all of them π
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. Target IRI π―
Each link-value carries one target IRI as a URI-Reference (converted to one first, if needed; see [RFC3987], Section 3.1), wrapped in angle brackets ("<>"). If the URI-Reference is relative, parsers MUST resolve it as per [RFC3986], Section 5. Any base IRI from the message's content is NOT applied, so don't go looking for it π ββοΈ
5.2. Context IRI πΈ
By default, the context of a link in the Link header field is the IRI of the requested resource. Simple.
When the anchor parameter is present, it overrides that with another URI. It could be a fragment of this resource, or a third resource (basically when the anchor value is an absolute URI) β¨ If the anchor parameter's value is a relative URI, parsers MUST resolve it as per [RFC3986], Section 5. Again, any base URI from the body's content is NOT applied π
Consuming implementations can choose to ignore links that have an anchor parameter. For example, the application might not allow the context IRI to be assigned to a different resource. In those cases the entire link is to be ignored, and consuming implementations MUST NOT process the link without applying the anchor. No half-baked links, bestie π
Also, depending on the HTTP status code and response headers, the context IRI might be "anonymous" (meaning no context IRI is available). For instance, that happens on a 404 response to a GET request π§
5.3. Relation Type π
The relation type of a link is carried in the value of the "rel" parameter. The "rel" parameter MUST NOT appear more than once in a given link-value. Any occurrences after the first MUST be ignored by parsers π«
The "rev" parameter was used in the past to say the semantics of the relationship go in the reverse direction. So a link from A to B with REL="X" expresses the same relationship as a link from B to A with REV="X". ngl that one confused everyone, so this specification deprecates "rev" π In most cases, using a separate relation type is way better.
Extension relation types are REQUIRED to be absolute URIs in Link headers, and they MUST be quoted if they contain a semicolon (";") or comma (",") π Those characters are delimiters in the header itself, so no surprises allowed.
5.4. Target Attributes π
The "hreflang", "media", "title", "title*", "type", and any link-extension link-params are considered target attributes for the link β¨
The "hreflang" parameter, when present, is a hint about what language the result of dereferencing the link should be in. It's only a hint though, so it doesn't override the Content-Language header of an HTTP response you get by actually following the link. If there are multiple "hreflang" parameters on a single link-value, that means multiple languages are available from the indicated resource π
The "media" parameter, when present, says the intended destination medium or media for style information (see [W3C.REC-html401-19991224], Section 6.13). This may get updated by [W3C.CR-css3-mediaqueries-20090915]. Its value MUST be quoted if it contains a semicolon (";") or comma (","), and there MUST NOT be more than one "media" parameter in a link-value π
The "title" parameter, when present, labels the destination of a link so it can be used as a human-readable identifier (like a menu entry), in the language given by the Content-Language header (if that's there). The "title" parameter MUST NOT appear more than once in a given link-value. Any occurrences after the first MUST be ignored by parsers π
The "title*" parameter can encode this label in a different character set, and/or include language information as per [RFC5987]. The "title*" parameter MUST NOT appear more than once in a given link-value, and occurrences after the first MUST be ignored by parsers. If the parameter has no language information, its language comes from the Content-Language header (when present) π·
If both "title" and "title*" show up in a link-value, processors SHOULD use the value of "title*" π
The "type" parameter, when present, is a hint about what the media type of the result of dereferencing the link should be. Same deal as before: it's only a hint, so it doesn't override the Content-Type header of an HTTP response you get from following the link. There MUST NOT be more than one type parameter in a link-value π§Έ
5.5. Examples π¦
For example:
Link: <http://example.com/TheBook/chapter2>; rel="previous";
title="previous chapter"
This indicates that "chapter2" is previous to this resource in a logical navigation path. Cute and clear π₯°
Similarly:
Link: </>; rel="http://example.net/foo"
This indicates that the root resource ("/") is related to this resource with the extension relation type "http://example.net/foo" π
The example below shows a Link header encoding multiple links, and also uses RFC 2231 encoding to handle both non-ASCII characters and language information. Big brain moment π§ β¨
Link: </TheBook/chapter2>;
rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>;
rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel
Here, both links have titles encoded in UTF-8 and use the German language ("de"). The second link contains the Unicode code point U+00E4 ("LATIN SMALL LETTER A WITH DIAERESIS") π©πͺ
Also, link-values can convey multiple links between the same target and context IRIs. For example:
Link: <http://example.org/>;
rel="start http://example.net/relation/other"
Here, the link to "http://example.org/" has the registered relation type "start" and the extension relation type "http://example.net/relation/other". Two relations, one link, zero stress π
6. IANA Considerations π³οΈβπ
6.1. Link HTTP Header Registration π
This specification updates the Message Header registry entry for "Link" in HTTP [RFC3864] so it refers to this document.
Header field: Link
Applicable protocol: http
Status: standard
Author/change controller:
IETF (iesg@ietf.org)
Internet Engineering Task Force
Specification document(s):
[RFC5988]
6.2. Link Relation Type Registry ποΈ
This specification establishes the Link Relation Type registry, and updates Atom [RFC4287] to refer to it in place of the "Registry of Link Relations" π«Ά
The underlying registry data (for example, the XML file) must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions (http://trustee.ietf.org/license-info) π
6.2.1. Registering New Link Relation Types π
Relation types are registered on the advice of a Designated Expert (appointed by the IESG or their delegate), with a Specification Required (using terminology from [RFC5226]) π
The requirements for registered relation types are described in Section 4.1 β¨
Registration requests normally consist of the completed registration template below, typically published in an RFC or Open Standard (in the sense described by [RFC2026], Section 7). However, to allow values to be allocated before publication, the Designated Expert may approve a registration once they're satisfied a specification will be published π
Relation types can also be registered by third parties, if the Designated Expert determines that an unregistered relation type is widely deployed and not likely to be registered in a timely manner. Main character energy for real π
The registration template is:
- Relation Name:
- Description:
- Reference:
- Notes: [optional]
- Application Data: [optional]
Registration requests should be sent to the link-relations@ietf.org mailing list, clearly marked in the subject line (for example, NEW RELATION - example to register an "example" relation type) π¬
Within at most 14 days of the request, the Designated Expert(s) will either approve or deny the registration request, and communicate that decision to the review list and IANA. Denials should include an explanation and, where applicable, suggestions for how to make the request succeed π₯Ή
Decisions (or the lack of one) made by the Designated Expert can first be appealed to the Application Area Directors (reachable at app-ads@tools.ietf.org, or by looking up their email addresses on http://www.iesg.org/). If the appellant is still not satisfied with the response, they can appeal to the full IESG using the iesg@iesg.org mailing list π«
IANA should only accept registry updates from the Designated Expert(s), and should direct all registration requests to the review mailing list. Gatekeeping but make it iconic π π
6.2.2. Initial Registry Contents β¨
Okay bestie, this is the starter pack for the Link Relation Type registry π Here's every entry it begins with, copied exactly:
o Relation Name: alternate
o Description: Designates a substitute for the link's context.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: appendix
o Description: Refers to an appendix.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: bookmark
o Description: Refers to a bookmark or entry point.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: chapter
o Description: Refers to a chapter in a collection of resources.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: contents
o Description: Refers to a table of contents.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: copyright
o Description: Refers to a copyright statement that applies to the
link's context.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: current
o Description: Refers to a resource containing the most recent
item(s) in a collection of resources.
o Reference: [RFC5005]
o Relation Name: describedby
o Description: Refers to a resource providing information about the
link's context.
o Documentation: <http://www.w3.org/TR/powder-dr/#assoc-linking>
o Relation Name: edit
o Description: Refers to a resource that can be used to edit the
link's context.
o Reference: [RFC5023]
o Relation Name: edit-media
o Description: Refers to a resource that can be used to edit media
associated with the link's context.
o Reference: [RFC5023]
o Relation Name: enclosure
o Description: Identifies a related resource that is potentially
large and might require special handling.
o Reference: [RFC4287]
o Relation Name: first
o Description: An IRI that refers to the furthest preceding resource
in a series of resources.
o Reference: [RFC5988]
o Notes: this relation type registration did not indicate a
reference. Originally requested by Mark Nottingham in December
2004.
o Relation Name: glossary
o Description: Refers to a glossary of terms.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: help
o Description: Refers to a resource offering help (more information,
links to other sources information, etc.)
o Reference: [W3C.REC-html401-19991224]
o Relation Name: hub
o Description: Refers to a hub that enables registration for
notification of updates to the context.
o Reference: <http://pubsubhubbub.googlecode.com/> <http://
pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.3.html>
o Notes: this relation type was requested by Brett Slatkin.
o Relation Name: index
o Description: Refers to an index.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: last
o Description: An IRI that refers to the furthest following resource
in a series of resources.
o Reference: [RFC5988]
o Notes: this relation type registration did not indicate a
reference. Originally requested by Mark Nottingham in December
2004.
o Relation Name: latest-version
o Description: Points to a resource containing the latest (e.g.,
current) version of the context.
o Reference: [RFC5829]
o Relation Name: license
o Description: Refers to a license associated with the link's
context.
o Reference: [RFC4946]
o Relation Name: next
o Description: Refers to the next resource in a ordered series of
resources.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: next-archive
o Description: Refers to the immediately following archive resource.
o Reference: [RFC5005]
o Relation Name: payment
o Description: indicates a resource where payment is accepted.
o Reference: [RFC5988]
o Notes: this relation type registration did not indicate a
reference. Requested by Joshua Kinberg and Robert Sayre. It is
meant as a general way to facilitate acts of payment, and thus
this specification makes no assumptions on the type of payment or
transaction protocol. Examples may include a Web page where
donations are accepted or where goods and services are available
for purchase. rel="payment" is not intended to initiate an
automated transaction. In Atom documents, a link element with a
rel="payment" attribute may exist at the feed/channel level and/or
the entry/item level. For example, a rel="payment" link at the
feed/channel level may point to a "tip jar" URI, whereas an entry/
item containing a book review may include a rel="payment" link
that points to the location where the book may be purchased
through an online retailer.
o Relation Name: prev
o Description: Refers to the previous resource in an ordered series
of resources. Synonym for "previous".
o Reference: [W3C.REC-html401-19991224]
o Relation Name: predecessor-version
o Description: Points to a resource containing the predecessor
version in the version history.
o Reference: [RFC5829]
o Relation Name: previous
o Description: Refers to the previous resource in an ordered series
of resources. Synonym for "prev".
o Reference: [W3C.REC-html401-19991224]
o Relation Name: prev-archive
o Description: Refers to the immediately preceding archive resource.
o Reference: [RFC5005]
o Relation Name: related
o Description: Identifies a related resource.
o Reference: [RFC4287]
o Relation Name: replies
o Description: Identifies a resource that is a reply to the context
of the link.
o Reference: [RFC4685]
o Relation Name: section
o Description: Refers to a section in a collection of resources.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: self
o Description: Conveys an identifier for the link's context.
o Reference: [RFC4287]
o Relation Name: service
o Description: Indicates a URI that can be used to retrieve a
service document.
o Reference: [RFC5023]
o Notes: When used in an Atom document, this relation type specifies
Atom Publishing Protocol service documents by default. Requested
by James Snell.
o Relation Name: start
o Description: Refers to the first resource in a collection of
resources.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: stylesheet
o Description: Refers to an external style sheet.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: subsection
o Description: Refers to a resource serving as a subsection in a
collection of resources.
o Reference: [W3C.REC-html401-19991224]
o Relation Name: successor-version
o Description: Points to a resource containing the successor version
in the version history.
o Reference: [RFC5829]
o Relation Name: up
o Description: Refers to a parent document in a hierarchy of
documents.
o Reference: [RFC5988]
o Notes: this relation type registration did not indicate a
reference. Requested by Noah Slater.
o Relation Name: version-history
o Description: points to a resource containing the version history
for the context.
o Reference: [RFC5829]
o Relation Name: via
o Description: Identifies a resource that is the source of the
information in the link's context.
o Reference: [RFC4287]
o Relation Name: working-copy
o Description: Points to a working copy for this resource.
o Reference: [RFC5829]
o Relation Name: working-copy-of
o Description: Points to the versioned resource from which this
working copy was obtained.
o Reference: [RFC5829]
6.3. Link Relation Application Data Registry π§
This spec also sets up the Link Relation Application Field registry π«Ά It lets entries in the Link Relation Type registry get extra application-specific data (we'll call it "app data" from here on) that applies to all instances of a given link relation type.
App data gets registered on the advice of a Designated Expert (appointed by the IESG or their delegate), with a Specification Required (using terminology from [RFC5226]).
Registration requests are made up of the completed registration template below π
o Application Name:
o Description:
o Default Value:
o Notes: [optional]
The Description SHOULD identify the value space of the app data. The Default Value MUST be appropriate to entries to which the app data does not apply.
Entries that were added before app data existed will automatically be treated as having the default value for that app data. If there are exceptions, the Designated Expert(s) should coordinate changes to those entries, working with the author of the proposed app data and with the registrant of the existing entry (if possible) π€
Registration requests should be sent to the link-relations@ietf.org mailing list, and should be marked clearly in the subject line (e.g., "NEW APP DATA - example" to register "example" app data) π
Within at most 14 days of the request, the Designated Expert will either approve or deny the registration request, and will tell the review list what they decided. Denials should include an explanation and, if applicable, suggestions for how to make the request successful. Registration requests that are still undetermined after more than 21 days can be brought to the IESG's attention (using the iesg@iesg.org mailing list) for resolution β°
When a registration request is successful, the Designated Expert will forward it to IANA for publication. IANA should only accept registry updates from the Designated Expert(s), and should direct all requests for registration to the review mailing list π¦
7. Security Considerations π
The content of the Link header field is not secure, private, or integrity-guaranteed, so please be careful when using it π Use of Transport Layer Security (TLS) with HTTP ([RFC2818] and [RFC2817]) is currently the only end-to-end way to provide that protection.
Applications that take advantage of typed links should think hard about the attack vectors that open up when they automatically follow, trust, or otherwise use links gathered from HTTP headers π In particular, Link headers that use the "anchor" parameter to associate a link's context with another resource should be treated with real caution π¨
The Link entity-header field makes heavy use of IRIs and URIs. See [RFC3987] for security considerations relating to IRIs. See [RFC3986] for security considerations relating to URIs. See [RFC2616] for security considerations relating to HTTP headers π‘οΈ
8. Internationalisation Considerations π
Target IRIs may need to be converted to URIs so they can be expressed in serialisations that don't support IRIs. This includes the Link HTTP header πΈ
Similarly, the anchor parameter of the Link header doesn't support IRIs, so IRIs must be converted to URIs before they're included there π
Relation types are defined as URIs, not IRIs, to make them easier to compare. They aren't expected to be displayed to end users π
9. References π
9.1. Normative References π
okay bestie, these are the docs the spec straight-up leans on, so you need them to read it. no cap π«Ά
- [RFC2026] Bradner, S., "The Internet Standards Process -- Revision 3", BCP 9, RFC 2026, October 1996.
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
- [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
- [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration Procedures for Message Header Fields", BCP 90, RFC 3864, September 2004.
- [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, January 2005.
- [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource Identifiers (IRIs)", RFC 3987, January 2005.
- [RFC4288] Freed, N. and J. Klensin, "Media Type Specifications and Registration Procedures", BCP 13, RFC 4288, December 2005.
- [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 2008.
- [RFC5646] Phillips, A. and M. Davis, "Tags for Identifying Languages", BCP 47, RFC 5646, September 2009.
- [RFC5987] Reschke, J., "Character Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters", RFC 5987, August 2010.
9.2. Informative References πΈ
these ones are the extra reading list, the stuff that gives the backstory and context β¨
- [RFC2068] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2068, January 1997.
- [RFC2817] Khare, R. and S. Lawrence, "Upgrading to TLS Within HTTP/1.1", RFC 2817, May 2000.
- [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.
- [RFC4287] Nottingham, M., Ed. and R. Sayre, Ed., "The Atom Syndication Format", RFC 4287, December 2005.
- [RFC4685] Snell, J., "Atom Threading Extensions", RFC 4685, September 2006.
- [RFC4946] Snell, J., "Atom License Extension", RFC 4946, July 2007.
- [RFC5005] Nottingham, M., "Feed Paging and Archiving", RFC 5005, September 2007.
- [RFC5023] Gregorio, J. and B. de hOra, "The Atom Publishing Protocol", RFC 5023, October 2007.
- [RFC5829] Brown, A., Clemm, G., and J. Reschke, "Link Relation Types for Simple Version Navigation between Web Resources", RFC 5829, April 2010.
- [W3C.CR-css3-mediaqueries-20090915] van Kesteren, A., Glazman, D., Lie, H., and T. Celik, "Media Queries", W3C Candidate Recommendation CR-css3-mediaqueries-20090915, September 2009,
http://www.w3.org/TR/2009/CR-css3-mediaqueries-20090915/. Latest version available athttp://www.w3.org/TR/css3-mediaqueries/. - [W3C.CR-curie-20090116] Birbeck, M. and S. McCarron, "CURIE Syntax 1.0", W3C Candidate Recommendation CR-curie-20090116, January 2009,
http://www.w3.org/TR/2009/CR-curie-20090116. Latest version available athttp://www.w3.org/TR/curie. - [W3C.REC-html401-19991224] Le Hors, A., Raggett, D., and I. Jacobs, "HTML 4.01 Specification", W3C Recommendation REC-html401-19991224, December 1999,
http://www.w3.org/TR/1999/REC-html401-19991224. Latest version available athttp://www.w3.org/TR/html401. - [W3C.REC-rdfa-syntax-20081014] Adida, B., Birbeck, M., McCarron, S., and S. Pemberton, "RDFa in XHTML: Syntax and Processing", W3C Recommendation REC-rdfa-syntax-20081014, October 2008,
http://www.w3.org/TR/2008/REC-rdfa-syntax-20081014. Latest version available athttp://www.w3.org/TR/rdfa-syntax. - [W3C.REC-xhtml-basic-20080729] Baker, M., Ishikawa, M., Stark, P., Matsui, S., Wugofski, T., and T. Yamakami, "XHTML[TM] Basic 1.1", W3C Recommendation REC-xhtml-basic-20080729, July 2008,
http://www.w3.org/TR/2008/REC-xhtml-basic-20080729. Latest version available athttp://www.w3.org/TR/xhtml-basic.
Appendix A. Notes on Using the Link Header with the HTML4 Format π§‘
okay so HTML is where the Link header's whole original vibe came from, which is why so many choices in this doc are about staying friendly with HTML β¨
HTML4 lets you map a link element over with the href attribute for the target URI, and rel carries the relation type, same as the Link header. The context is the URI of the entire HTML document π
every link relation type HTML4 defines is already in the Link Relation Type registry, so you can use them as-is, no changes needed π but there are a few different ways to write extension relation types into HTML4, like:
- as absolute URIs,
- using the document-wide
profileattribute's URI as a prefix for relation types, or - using the RDFa [W3C.REC-rdfa-syntax-20081014] convention of mapping token prefixes to URIs (kinda like XML namespaces) (note that RDFa is only defined to work in XHTML [W3C.REC-xhtml-basic-20080729], but people sometimes use it in HTML4).
so each application of linking will need to figure out how its extension links get written into HTML4 π
surveys of existing HTML found that unregistered link relation types that aren't URIs are (perhaps inevitably) super common π consuming HTML implementations should not treat those unregistered short links as errors. they're better thought of as relation types with a local scope, meaning their meaning is specific and maybe private to that document π¦
HTML4 also defines a bunch of attributes on links that the Link header doesn't spell out. those can be serialised as link-extensions to keep everything faithful π
last one: HTML4 gives a special meaning when the "alternate" and "stylesheet" relation types show up together on the same link. links like that should be serialised in the Link header as one list of relation-types, like rel="alternate stylesheet", so that relationship survives π
Appendix B. Notes on Using the Link Header with the Atom Format π
Atom puts links in the atom:link element, with href holding the target IRI and rel holding the relation type. The context is either a feed IRI or an entry ID, depending on where the link sits. feed-level links are the obvious picks for going out as a Link header πΈ
when you turn an atom:link into a Link header, you have to convert target IRIs (if they're used) into URIs π₯
Atom defines extension relation types in terms of IRIs. this spec redefines them as URIs, which makes comparing them simpler and less error-prone π§
Atom lets registered link relation types be written as absolute URIs. those SHOULD be converted to the registered form (e.g., "http://www.iana.org/assignments/relation/self" to "self") so they don't get mistaken for extension relation types π
also, Atom compares link relation types case-sensitively, so registered link relation types SHOULD be converted to their registered form (usually lowercase) when they're serialised in an Atom document π
note also that while the Link header lets multiple relations sit in a single link, atom:link doesn't. so a single link-value may map to several atom:link elements β¨
just like with HTML, atom:link defines some attributes that the Link header syntax doesn't explicitly mirror, but they can still be used as link-extensions to keep everything faithful π«Ά
Appendix C. Acknowledgements π
this spec lifts the idea and definition for the Link header from RFC 2068, and all the credit for that goes to the authors and contributors of that doc π the link relation type registrations come from several documents, so check the applicable references for those π
the author would like to thank the many people who commented on, encouraged and gave feedback on this spec, especially Frank Ellermann, Roy Fielding, Eran Hammer-Lahav, and Julian Reschke π
Author's Address π
Mark Nottingham
EMail: mnot@mnot.net URI: http://www.mnot.net/
π¦ where this page comes from
- ietf: rfc5988 2010-10
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms