1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml" xml:
lang=
"en" lang=
"en">
4 <head profile=
"http://dublincore.org/documents/2008/08/04/dc-html/">
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8" />
6 <meta name=
"robots" content=
"index,follow" />
7 <meta name=
"creator" content=
"rfcmarkup version 1.129d on tools.ietf.org" />
8 <link rel=
"schema.DC" href=
"http://purl.org/dc/elements/1.1/" />
9 <meta name=
"DC.Relation.Replaces" content=
"rfc5988" />
10 <meta name=
"DC.Identifier" content=
"urn:ietf:rfc:8288" />
11 <meta name=
"DC.Date.Issued" content=
"October, 2017" />
12 <meta name=
"DC.Creator" content=
"Mark Nottingham <mnot@mnot.net>" />
13 <meta name=
"DC.Description.Abstract" content=
"This specification defines a model for the relationships between
14 resources on the Web ("links") and the type of those relationships
15 ("link relation types"). It also defines the serialisation of such
16 links in HTTP headers with the Link header field." />
17 <meta name=
"DC.Title" content=
"Web Linking" />
19 <link rel=
"icon" href=
"/images/rfc.png" type=
"image/png" />
20 <link rel=
"shortcut icon" href=
"/images/rfc.png" type=
"image/png" />
21 <title>RFC
8288 - Web Linking
</title>
24 <style type=
"text/css">
26 and (min-width:
992px)
27 and (max-width:
1199px) {
28 body { font-size:
14pt; }
29 div.content { width:
96ex; margin:
0 auto; }
32 and (min-width:
768px)
33 and (max-width:
991px) {
34 body { font-size:
14pt; }
35 div.content { width:
96ex; margin:
0 auto; }
38 and (min-width:
480px)
39 and (max-width:
767px) {
40 body { font-size:
11pt; }
41 div.content { width:
96ex; margin:
0 auto; }
44 and (max-width:
479px) {
45 body { font-size:
8pt; }
46 div.content { width:
96ex; margin:
0 auto; }
49 and (min-device-width :
375px)
50 and (max-device-width :
667px) {
51 body { font-size:
9.5pt; }
52 div.content { width:
96ex; margin:
0; }
55 and (min-device-width:
1200px) {
56 body { font-size:
10pt; margin:
0 4em; }
57 div.content { width:
96ex; margin:
0; }
59 h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
61 /* line-height:
0pt; */
64 font-family: monospace;
75 font-family: monospace;
81 page-break-before: always;
84 text-decoration: none;
89 text-decoration: none;
93 font-family: monospace;
96 h1, h2, h3, h4, h5, h6 {
102 text-decoration: none;
109 .grey, .grey a:link, .grey a:visited {
113 background-color: #EEE;
116 border-top:
7px solid #EEE;
123 .bgwhite { background-color: white; }
124 .bgred { background-color: #F44; }
125 .bggrey { background-color: #
666; }
126 .bgbrown { background-color: #
840; }
127 .bgorange { background-color: #FA0; }
128 .bgyellow { background-color: #EE0; }
129 .bgmagenta{ background-color: #F4F; }
130 .bgblue { background-color: #
66F; }
131 .bgcyan { background-color: #
4DD; }
132 .bggreen { background-color: #
4F4; }
134 .legend { font-size:
90%; }
135 .cplate { font-size:
70%; border: solid grey
1px; }
147 <script type=
"text/javascript"><!--
148 function addHeaderTags() {
149 var spans = document.getElementsByTagName("span");
150 for (var i=0; i < spans.length; i++) {
153 var level = elem.getAttribute("class");
154 if (level == "h1" || level == "h2" || level == "h3" || level == "h4" || level == "h5" || level == "h6") {
155 elem.innerHTML = "<"+level+">"+elem.innerHTML+"</"+level+">";
160 var legend_html = "Colour legend:<br /> <table> <tr><td>Unknown:</td> <td><span class='cplate bgwhite'> </span></td></tr> <tr><td>Draft:</td> <td><span class='cplate bgred'> </span></td></tr> <tr><td>Informational:</td> <td><span class='cplate bgorange'> </span></td></tr> <tr><td>Experimental:</td> <td><span class='cplate bgyellow'> </span></td></tr> <tr><td>Best Common Practice:</td> <td><span class='cplate bgmagenta'> </span></td></tr> <tr><td>Proposed Standard:</td> <td><span class='cplate bgblue'> </span></td></tr> <tr><td>Draft Standard (old designation):</td> <td><span class='cplate bgcyan'> </span></td></tr> <tr><td>Internet Standard:</td> <td><span class='cplate bggreen'> </span></td></tr> <tr><td>Historic:</td> <td><span class='cplate bggrey'> </span></td></tr> <tr><td>Obsolete:</td> <td><span class='cplate bgbrown'> </span></td></tr> </table>";
161 function showElem(id) {
162 var elem = document.getElementById(id);
163 elem.innerHTML = eval(id+"_html");
164 elem.style.visibility='visible';
166 function hideElem(id) {
167 var elem = document.getElementById(id);
168 elem.style.visibility='hidden';
174 <body onload=
"addHeaderTags()">
175 <div class=
"content">
176 <div style=
"height: 13px;">
177 <div onmouseover=
"this.style.cursor='pointer';"
178 onclick=
"showElem('legend');"
179 onmouseout=
"hideElem('legend')"
180 style=
"height: 6px; position: absolute;"
181 class=
"pre noprint docinfo bgblue"
182 title=
"Click for colour legend." > </div>
184 class=
"docinfo noprint pre legend"
185 style=
"position:absolute; top: 4px; left: 4ex; visibility:hidden; background-color: white; padding: 4px 9px 5px 7px; border: solid #345 1px; "
186 onmouseover=
"showElem('legend');"
187 onmouseout=
"hideElem('legend');">
190 <span class=
"pre noprint docinfo top">[
<a href=
"../html/" title=
"Document search and retrieval page">Docs
</a>] [
<a href=
"/rfc/rfc8288.txt" title=
"Plaintext version of this document">txt
</a>|
<a href=
"/pdf/rfc8288" title=
"PDF version of this document">pdf
</a>] [
<a href=
"./draft-nottingham-rfc5988bis" title=
"draft-nottingham-rfc5988bis">draft-nottingha...
</a>] [
<a href='https://datatracker.ietf.org/doc/rfc8288' title='IESG Datatracker information for this document'
>Tracker
</a>] [
<a href=
"/rfcdiff?difftype=--hwdiff&url2=rfc8288" title=
"Inline diff (wdiff)">Diff1
</a>] [
<a href=
"/rfcdiff?url2=rfc8288" title=
"Side-by-side diff">Diff2
</a>] [
<a href=
"https://www.rfc-editor.org/errata_search.php?rfc=8288">Errata
</a>]
</span><br />
191 <span class=
"pre noprint docinfo"> </span><br />
192 <span class=
"pre noprint docinfo"> PROPOSED STANDARD
</span><br />
193 <span class=
"pre noprint docinfo"> <span style='color: #C00;'
>Errata Exist
</span></span><br />
195 Internet Engineering Task Force (IETF) M. Nottingham
196 Request for Comments:
8288 October
2017
197 Obsoletes:
<a href=
"./rfc5988">5988</a>
198 Category: Standards Track
202 <span class=
"h1">Web Linking
</span>
206 This specification defines a model for the relationships between
207 resources on the Web ("links") and the type of those relationships
208 ("link relation types").
210 It also defines the serialisation of such links in HTTP headers with
211 the Link header field.
215 This is an Internet Standards Track document.
217 This document is a product of the Internet Engineering Task Force
218 (IETF). It represents the consensus of the IETF community. It has
219 received public review and has been approved for publication by the
220 Internet Engineering Steering Group (IESG). Further information on
221 Internet Standards is available in
<a href=
"./rfc7841#section-2">Section
2 of RFC
7841</a>.
223 Information about the current status of this document, any errata,
224 and how to provide feedback on it may be obtained at
225 <a href=
"https://www.rfc-editor.org/info/rfc8288">https://www.rfc-editor.org/info/rfc8288
</a>.
246 <span class=
"grey">Nottingham Standards Track [Page
1]
</span></pre>
247 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-2" id=
"page-2" href=
"#page-2" class=
"invisible"> </a>
248 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
253 Copyright (c)
2017 IETF Trust and the persons identified as the
254 document authors. All rights reserved.
256 This document is subject to
<a href=
"./bcp78">BCP
78</a> and the IETF Trust's Legal
257 Provisions Relating to IETF Documents
258 (
<a href=
"https://trustee.ietf.org/license-info">https://trustee.ietf.org/license-info
</a>) in effect on the date of
259 publication of this document. Please review these documents
260 carefully, as they describe your rights and restrictions with respect
261 to this document. Code Components extracted from this document must
262 include Simplified BSD License text as described in Section
4.e of
263 the Trust Legal Provisions and are provided without warranty as
264 described in the Simplified BSD License.
266 This document may contain material from IETF Documents or IETF
267 Contributions published or made publicly available before November
268 10,
2008. The person(s) controlling the copyright in some of this
269 material may not have granted the IETF Trust the right to allow
270 modifications of such material outside the IETF Standards Process.
271 Without obtaining an adequate license from the person(s) controlling
272 the copyright in such materials, this document may not be modified
273 outside the IETF Standards Process, and derivative works of it may
274 not be created outside the IETF Standards Process, except to format
275 it for publication as an RFC or to translate it into languages other
302 <span class=
"grey">Nottingham Standards Track [Page
2]
</span></pre>
303 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-3" id=
"page-3" href=
"#page-3" class=
"invisible"> </a>
304 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
309 <a href=
"#section-1">1</a>. Introduction . . . . . . . . . . . . . . . . . . . . . . . .
<a href=
"#page-4">4</a>
310 <a href=
"#section-1.1">1.1</a>. Notational Conventions . . . . . . . . . . . . . . . . .
<a href=
"#page-4">4</a>
311 <a href=
"#section-1.2">1.2</a>. Conformance and Error Handling . . . . . . . . . . . . .
<a href=
"#page-4">4</a>
312 <a href=
"#section-2">2</a>. Links . . . . . . . . . . . . . . . . . . . . . . . . . . . .
<a href=
"#page-6">6</a>
313 <a href=
"#section-2.1">2.1</a>. Link Relation Types . . . . . . . . . . . . . . . . . . .
<a href=
"#page-6">6</a>
314 <a href=
"#section-2.1.1">2.1.1</a>. Registered Relation Types . . . . . . . . . . . . . .
<a href=
"#page-6">6</a>
315 <a href=
"#section-2.1.2">2.1.2</a>. Extension Relation Types . . . . . . . . . . . . . .
<a href=
"#page-8">8</a>
316 <a href=
"#section-2.2">2.2</a>. Target Attributes . . . . . . . . . . . . . . . . . . . .
<a href=
"#page-9">9</a>
317 <a href=
"#section-3">3</a>. Link Serialisation in HTTP Headers . . . . . . . . . . . . .
<a href=
"#page-9">9</a>
318 <a href=
"#section-3.1">3.1</a>. Link Target . . . . . . . . . . . . . . . . . . . . . . .
<a href=
"#page-10">10</a>
319 <a href=
"#section-3.2">3.2</a>. Link Context . . . . . . . . . . . . . . . . . . . . . .
<a href=
"#page-10">10</a>
320 <a href=
"#section-3.3">3.3</a>. Relation Type . . . . . . . . . . . . . . . . . . . . . .
<a href=
"#page-11">11</a>
321 <a href=
"#section-3.4">3.4</a>. Target Attributes . . . . . . . . . . . . . . . . . . . .
<a href=
"#page-11">11</a>
322 <a href=
"#section-3.4.1">3.4.1</a>. Serialisation-Defined Attributes . . . . . . . . . .
<a href=
"#page-11">11</a>
323 <a href=
"#section-3.4.2">3.4.2</a>. Extension Attributes . . . . . . . . . . . . . . . .
<a href=
"#page-13">13</a>
324 <a href=
"#section-3.5">3.5</a>. Link Header Field Examples . . . . . . . . . . . . . . .
<a href=
"#page-13">13</a>
325 <a href=
"#section-4">4</a>. IANA Considerations . . . . . . . . . . . . . . . . . . . . .
<a href=
"#page-14">14</a>
326 <a href=
"#section-4.1">4.1</a>. Link HTTP Header Field Registration . . . . . . . . . . .
<a href=
"#page-14">14</a>
327 <a href=
"#section-4.2">4.2</a>. Link Relation Type Registry . . . . . . . . . . . . . . .
<a href=
"#page-14">14</a>
328 <a href=
"#section-4.3">4.3</a>. Link Relation Application Data Registry . . . . . . . . .
<a href=
"#page-15">15</a>
329 <a href=
"#section-5">5</a>. Security Considerations . . . . . . . . . . . . . . . . . . .
<a href=
"#page-15">15</a>
330 <a href=
"#section-6">6</a>. Internationalisation Considerations . . . . . . . . . . . . .
<a href=
"#page-16">16</a>
331 <a href=
"#section-7">7</a>. References . . . . . . . . . . . . . . . . . . . . . . . . .
<a href=
"#page-16">16</a>
332 <a href=
"#section-7.1">7.1</a>. Normative References . . . . . . . . . . . . . . . . . .
<a href=
"#page-16">16</a>
333 <a href=
"#section-7.2">7.2</a>. Informative References . . . . . . . . . . . . . . . . .
<a href=
"#page-17">17</a>
334 <a href=
"#appendix-A">Appendix A
</a>. Notes on Other Link Serialisations . . . . . . . . .
<a href=
"#page-19">19</a>
335 <a href=
"#appendix-A.1">A
.1</a>. Link Serialisation in HTML . . . . . . . . . . . . . . .
<a href=
"#page-19">19</a>
336 <a href=
"#appendix-A.2">A
.2</a>. Link Serialisation in Atom . . . . . . . . . . . . . . .
<a href=
"#page-19">19</a>
337 <a href=
"#appendix-B">Appendix B
</a>. Algorithms for Parsing Link Header Fields . . . . .
<a href=
"#page-20">20</a>
338 <a href=
"#appendix-B.1">B
.1</a>. Parsing a Header Set for Links . . . . . . . . . . . . .
<a href=
"#page-20">20</a>
339 <a href=
"#appendix-B.2">B
.2</a>. Parsing a Link Field Value . . . . . . . . . . . . . . .
<a href=
"#page-21">21</a>
340 <a href=
"#appendix-B.3">B
.3</a>. Parsing Parameters . . . . . . . . . . . . . . . . . . .
<a href=
"#page-22">22</a>
341 <a href=
"#appendix-B.4">B
.4</a>. Parsing a Quoted String . . . . . . . . . . . . . . . . .
<a href=
"#page-23">23</a>
342 <a href=
"#appendix-C">Appendix C
</a>. Changes from
<a href=
"./rfc5988">RFC
5988</a> . . . . . . . . . . . . . . .
<a href=
"#page-24">24</a>
343 Author's Address . . . . . . . . . . . . . . . . . . . . . . . .
<a href=
"#page-24">24</a>
358 <span class=
"grey">Nottingham Standards Track [Page
3]
</span></pre>
359 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-4" id=
"page-4" href=
"#page-4" class=
"invisible"> </a>
360 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
363 <span class=
"h2"><a class=
"selflink" name=
"section-1" href=
"#section-1">1</a>. Introduction
</span>
365 This specification defines a model for the relationships between
366 resources on the Web ("links") and the type of those relationships
367 ("link relation types").
369 HTML [
<a href=
"#ref-W3C.REC-html5-20141028" title=
""HTML5"">W3C.REC-html5-
20141028</a>] and Atom [
<a href=
"./rfc4287" title=
""The Atom Syndication Format"">RFC4287
</a>] both have well-
370 defined concepts of linking;
<a href=
"#section-2">Section
2</a> generalises this into a
371 framework that encompasses linking in these formats and (potentially)
374 Furthermore,
<a href=
"#section-3">Section
3</a> defines an HTTP header field for conveying
377 <span class=
"h3"><a class=
"selflink" name=
"section-1.1" href=
"#section-1.1">1.1</a>. Notational Conventions
</span>
379 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
380 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
381 "OPTIONAL" in this document are to be interpreted as described in
<a href=
"./bcp14">BCP
</a>
382 <a href=
"./bcp14">14</a> [
<a href=
"./rfc2119" title=
""Key words for use in RFCs to Indicate Requirement Levels"">RFC2119
</a>] [
<a href=
"./rfc8174" title=
""Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words"">RFC8174
</a>] when, and only when, they appear in all
383 capitals, as shown here.
385 This document uses the Augmented Backus-Naur Form (ABNF) [
<a href=
"./rfc5234" title=
""Augmented BNF for Syntax Specifications: ABNF"">RFC5234
</a>]
386 notation of [
<a href=
"./rfc7230" title=
""Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing"">RFC7230
</a>], including the #rule, and explicitly includes
387 the following rules from it: quoted-string, token, SP (space), BWS
388 (bad whitespace), OWS (optional whitespace), RWS (required
389 whitespace), LOALPHA, DIGIT.
391 Additionally, the following rules are included:
393 o URI and URI-Reference from [
<a href=
"./rfc3986" title=
""Uniform Resource Identifier (URI): Generic Syntax"">RFC3986
</a>],
394 o type-name and subtype-name from [
<a href=
"./rfc6838" title=
""Media Type Specifications and Registration Procedures"">RFC6838
</a>],
395 o media-query-list from [
<a href=
"#ref-W3C.REC-css3-mediaqueries-20120619" title=
""Media Queries"">W3C.REC-css3-mediaqueries-
20120619</a>], and
396 o Language-Tag from [
<a href=
"./rfc5646" title=
""Tags for Identifying Languages"">RFC5646
</a>].
398 <span class=
"h3"><a class=
"selflink" name=
"section-1.2" href=
"#section-1.2">1.2</a>. Conformance and Error Handling
</span>
400 The requirements regarding conformance and error handling highlighted
401 in
<a href=
"./rfc7230#section-2.5">[RFC7230], Section
2.5</a> apply to this document.
414 <span class=
"grey">Nottingham Standards Track [Page
4]
</span></pre>
415 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-5" id=
"page-5" href=
"#page-5" class=
"invisible"> </a>
416 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
419 <span class=
"h2"><a class=
"selflink" name=
"section-2" href=
"#section-2">2</a>. Links
</span>
421 In this specification, a link is a typed connection between two
422 resources and is comprised of:
425 o a link relation type (
<a href=
"#section-2.1">Section
2.1</a>),
427 o optionally, target attributes (
<a href=
"#section-2.2">Section
2.2</a>).
429 A link can be viewed as a statement of the form "link context has a
430 link relation type resource at link target, which has target
433 For example, "https://www.example.com/" has a "canonical" resource at
434 "https://example.com", which has a "type" of "text/html".
436 Link contexts and link targets are both Internationalized Resource
437 Identifiers (IRIs) [
<a href=
"./rfc3987" title=
""Internationalized Resource Identifiers (IRIs)"">RFC3987
</a>]. However, in the common case, the link
438 context will also be a URI [
<a href=
"./rfc3986" title=
""Uniform Resource Identifier (URI): Generic Syntax"">RFC3986
</a>], because many protocols (such as
439 HTTP) do not support dereferencing IRIs. Likewise, the link target
440 will sometimes be converted to a URI (see
<a href=
"./rfc3987#section-3.1">[RFC3987], Section
3.1</a>) in
441 serialisations that do not support IRIs (such as the Link header
442 field defined in
<a href=
"#section-3">Section
3</a>).
444 This specification does not place restrictions on the cardinality of
445 links; there can be multiple links to and from a particular target
446 and multiple links of the same or different types between a given
447 context and target. Likewise, the relative ordering of links in any
448 particular serialisation, or between serialisations (e.g., the Link
449 header field and in-content links), is not specified or significant
450 in this specification; applications that wish to consider ordering
451 significant can do so.
453 Links are conveyed in link serialisations; they are the "bytes on the
454 wire", and can occur in various forms. For example, Atom [
<a href=
"./rfc4287" title=
""The Atom Syndication Format"">RFC4287
</a>]
455 and HTML [
<a href=
"#ref-W3C.REC-html5-20141028" title=
""HTML5"">W3C.REC-html5-
20141028</a>] both defined serialisations of
456 links into their respective formats, and
<a href=
"#section-3">Section
3</a> defines how to
457 serialise links in HTTP header fields.
459 This specification does not define a general syntax for links across
460 different serialisations, nor does it mandate a specific context for
461 any given link; it is expected that serialisations of links will
462 specify both aspects.
464 Finally, links are used by link applications. Generally, an
465 application will define the link relation type(s) it uses, along with
466 the serialisation(s) that they might occur within. For example, the
470 <span class=
"grey">Nottingham Standards Track [Page
5]
</span></pre>
471 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-6" id=
"page-6" href=
"#page-6" class=
"invisible"> </a>
472 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
475 application "Web browsing" looks for the "stylesheet" link relation
476 type in the HTML link serialisation (and optionally in the Link
477 header field), whereas the application "AtomPub" uses the "edit" and
478 "edit-media" link relations in the Atom serialisation.
480 <span class=
"h3"><a class=
"selflink" name=
"section-2.1" href=
"#section-2.1">2.1</a>. Link Relation Types
</span>
482 In the simplest case, a link relation type identifies the semantics
483 of a link. For example, a link with the relation type "copyright"
484 indicates that the current link context has a copyright resource at
487 Link relation types can also be used to indicate that the target
488 resource has particular attributes, or exhibits particular
489 behaviours; for example, a "service" link implies that the link
490 target can be used as part of a defined protocol (in this case, a
491 service description).
493 Relation types are not to be confused with media types [
<a href=
"./rfc2046" title=
""Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types"">RFC2046
</a>];
494 they do not identify the format of the representation that results
495 when the link is dereferenced. Rather, they only describe how the
496 current context is related to another resource.
498 Relation types SHOULD NOT infer any additional semantics based upon
499 the presence or absence of another link relation type, or its own
500 cardinality of occurrence. An exception to this is the combination
501 of the "alternate" and "stylesheet" registered relation types, which
502 has special meaning in HTML for historical reasons.
504 There are two kinds of relation types: registered and extension.
506 <span class=
"h4"><a class=
"selflink" name=
"section-2.1.1" href=
"#section-2.1.1">2.1.1</a>. Registered Relation Types
</span>
508 Well-defined relation types can be registered as tokens for
509 convenience and/or to promote reuse by other applications, using the
510 procedure in
<a href=
"#section-2.1.1.1">Section
2.1.1.1</a>.
512 Registered relation type names MUST conform to the reg-rel-type rule
513 (see
<a href=
"#section-3.3">Section
3.3</a>) and MUST be compared character by character in a
514 case-insensitive fashion. They SHOULD be appropriate to the
515 specificity of the relation type; that is, if the semantics are
516 highly specific to a particular application, the name should reflect
517 that, so that more general names are available for less-specific use.
519 Registered relation types MUST NOT constrain the media type of the
520 link context and MUST NOT constrain the available representation
521 media types of the link target. However, they can specify the
522 behaviours and properties of the target resource (e.g., allowable
526 <span class=
"grey">Nottingham Standards Track [Page
6]
</span></pre>
527 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-7" id=
"page-7" href=
"#page-7" class=
"invisible"> </a>
528 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
531 HTTP methods, and request and response media types that are required
534 Historically, registered relation types have been identified with a
535 URI [
<a href=
"./rfc3986" title=
""Uniform Resource Identifier (URI): Generic Syntax"">RFC3986
</a>] by prefixing their names with an application-defined
536 base URI (e.g., see
<a href=
"#appendix-A.2">Appendix A
.2</a>). This practice is NOT RECOMMENDED,
537 because the resulting strings will not be considered equivalent to
538 the registered relation types by other applications. Applications
539 that do use such URIs internally MUST NOT use them in link
540 serialisations that do not explicitly accommodate them.
542 <span class=
"h5"><a class=
"selflink" name=
"section-2.1.1.1" href=
"#section-2.1.1.1">2.1.1.1</a>. Registering Link Relation Types
</span>
544 The "Link Relations" registry is located at
545 <<a href=
"https://www.iana.org/assignments/link-relations/">https://www.iana.org/assignments/link-relations/
</a>>. Registration
546 requests can be made by following the instructions located there or
547 by sending an email to the
<link-relations@ietf.org
> mailing list.
549 Registration requests consist of at least the following information:
551 o *Relation Name*: The name of the relation type
553 o *Description*: A short English description of the type's
554 semantics. It SHOULD be stated in terms of the relationship
555 between the link context and link target.
557 o *Reference*: Reference to the document that specifies the link
558 relation type, preferably including a URI that can be used to
559 retrieve a copy of the document. An indication of the relevant
560 section(s) can also be included but is not required.
562 The expert(s) can define additional fields to be collected in the
565 General requirements for registered relation types are described in
566 <a href=
"#section-2.1.1">Section
2.1.1</a>.
568 Registrations MUST reference a freely available, stable
571 Note that relation types can be registered by third parties
572 (including the expert(s)), if the expert(s) determines that an
573 unregistered relation type is widely deployed and not likely to be
574 registered in a timely manner otherwise. Such registrations still
575 are subject to the requirements defined, including the need to
576 reference a specification.
582 <span class=
"grey">Nottingham Standards Track [Page
7]
</span></pre>
583 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-8" id=
"page-8" href=
"#page-8" class=
"invisible"> </a>
584 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
587 <span class=
"h5"><a class=
"selflink" name=
"section-2.1.1.2" href=
"#section-2.1.1.2">2.1.1.2</a>. Registration Request Processing
</span>
589 Relation types are registered using the Specification Required policy
590 (see
<a href=
"./rfc8126#section-4.6">Section
4.6 of [RFC8126]
</a>), which implies review and approval by
593 The goal of the registry is to reflect common use of links on the
594 Internet. Therefore, the expert(s) should be strongly biased towards
595 approving registrations, unless they are abusive, frivolous, not
596 likely to be used on the Internet, or actively harmful to the
597 Internet and/or the Web (not merely aesthetically displeasing or
598 architecturally dubious). As stated in
<a href=
"#section-2.1.1">Section
2.1.1</a>, the expert(s)
599 can withhold registration of names that are too general for the
600 proposed application.
602 The expert(s) will clearly identify any issues that cause a
603 registration to be refused. Advice about the semantics of a proposed
604 link relation type can be given, but if it does not block
605 registration, this should be explicitly stated.
607 When a request is approved, the expert(s) will inform IANA, and the
608 registration will be processed. The IESG is the final arbiter of any
611 <span class=
"h4"><a class=
"selflink" name=
"section-2.1.2" href=
"#section-2.1.2">2.1.2</a>. Extension Relation Types
</span>
613 Applications that don't wish to register a relation type can use an
614 extension relation type, which is a URI [
<a href=
"./rfc3986" title=
""Uniform Resource Identifier (URI): Generic Syntax"">RFC3986
</a>] that uniquely
615 identifies the relation type. Although the URI can point to a
616 resource that contains a definition of the semantics of the relation
617 type, clients SHOULD NOT automatically access that resource to avoid
618 overburdening its server.
620 The URI used for an extension relation type SHOULD be under the
621 control of the person or party defining it or be delegated to them.
623 When extension relation types are compared, they MUST be compared as
624 strings (after converting to URIs if serialised in a different
625 format) in a case-insensitive fashion, character by character.
626 Because of this, all-lowercase URIs SHOULD be used for extension
629 Note that while extension relation types are required to be URIs, a
630 serialisation of links can specify that they are expressed in another
631 form, as long as they can be converted to URIs.
638 <span class=
"grey">Nottingham Standards Track [Page
8]
</span></pre>
639 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-9" id=
"page-9" href=
"#page-9" class=
"invisible"> </a>
640 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
643 <span class=
"h3"><a class=
"selflink" name=
"section-2.2" href=
"#section-2.2">2.2</a>. Target Attributes
</span>
645 Target attributes are a list of key/value pairs that describe the
646 link or its target; for example, a media type hint.
648 They can be defined both by individual link relation types and by
651 This specification does not attempt to coordinate the name of target
652 attributes, their cardinality, or use. Those creating and
653 maintaining serialisations SHOULD coordinate their target attributes
654 to avoid conflicts in semantics or syntax and MAY define their own
655 registries of target attributes.
657 The names of target attributes SHOULD conform to the token rule, but
658 SHOULD NOT include any of the characters "%", "'", or "*", for
659 portability across serialisations and MUST be compared in a case-
662 Target attribute definitions SHOULD specify:
664 o The serialisation of their values into Unicode or a subset
665 thereof, to maximise their chances of portability across link
667 o The semantics and error handling of multiple occurrences of the
668 target attribute on a given link.
670 This specification does define target attributes for use in the Link
671 HTTP header field in
<a href=
"#section-3.4">Section
3.4</a>.
673 <span class=
"h2"><a class=
"selflink" name=
"section-3" href=
"#section-3">3</a>. Link Serialisation in HTTP Headers
</span>
675 The Link header field provides a means for serialising one or more
676 links into HTTP headers.
678 The ABNF for the field value is:
681 link-value = "
<" URI-Reference "
>" *( OWS ";" OWS link-param )
682 link-param = token BWS [ "=" BWS ( token / quoted-string ) ]
684 Note that any link-param can be generated with values using either
685 the token or the quoted-string syntax; therefore, recipients MUST be
686 able to parse both forms. In other words, the following parameters
694 <span class=
"grey">Nottingham Standards Track [Page
9]
</span></pre>
695 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-10" id=
"page-10" href=
"#page-10" class=
"invisible"> </a>
696 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
699 Previous definitions of the Link header did not equate the token and
700 quoted-string forms explicitly; the title parameter was always
701 quoted, and the hreflang parameter was always a token. Senders
702 wishing to maximize interoperability will send them in those forms.
704 Individual link-params specify their syntax in terms of the value
705 after any necessary unquoting (as per
<a href=
"./rfc7230#section-3.2.6">[RFC7230], Section
3.2.6</a>).
707 This specification establishes the link-params "rel", "anchor", and
708 "rev" (which are part of the general link model), as well as
709 "hreflang", "media", "title", "title*", and "type" (which are target
710 attributes defined by the serialisation).
712 <span class=
"h3"><a class=
"selflink" name=
"section-3.1" href=
"#section-3.1">3.1</a>. Link Target
</span>
714 Each link-value conveys one target IRI as a URI-Reference (after
715 conversion to one, if necessary; see
<a href=
"./rfc3987#section-3.1">[RFC3987], Section
3.1</a>) inside
716 angle brackets ("
<>"). If the URI-Reference is relative, parsers
717 MUST resolve it as per
<a href=
"./rfc3986#section-5">[RFC3986], Section
5</a>. Note that any base IRI
718 appearing in the message's content is not applied.
720 <span class=
"h3"><a class=
"selflink" name=
"section-3.2" href=
"#section-3.2">3.2</a>. Link Context
</span>
722 By default, the context of a link conveyed in the Link header field
723 is the URL of the representation it is associated with, as defined in
724 <a href=
"./rfc7231#section-3.1.4.1">[RFC7231], Section
3.1.4.1</a>, and is serialised as a URI.
726 When present, the anchor parameter overrides this with another URI,
727 such as a fragment of this resource, or a third resource (i.e., when
728 the anchor value is an absolute URI). If the anchor parameter's
729 value is a relative URI, parsers MUST resolve it as per
<a href=
"./rfc3986#section-5">[RFC3986],
730 Section
5</a>. Note that any base URI from the body's content is not
733 The ABNF for the "anchor" parameter's value is:
735 URI-Reference ;
<a href=
"./rfc3986#section-4.1">Section
4.1 of [RFC3986]
</a>
737 Link application can choose to ignore links with an anchor parameter.
738 For example, the application in use might not allow the link context
739 to be assigned to a different resource. In such cases, the entire
740 link is to be ignored; link applications MUST NOT process the link
741 without applying the anchor.
743 Note that depending on HTTP status code and response headers, the
744 link context might be "anonymous" (i.e., no link context is
745 available). For example, this is the case on a
404 response to a GET
750 <span class=
"grey">Nottingham Standards Track [Page
10]
</span></pre>
751 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-11" id=
"page-11" href=
"#page-11" class=
"invisible"> </a>
752 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
755 <span class=
"h3"><a class=
"selflink" name=
"section-3.3" href=
"#section-3.3">3.3</a>. Relation Type
</span>
757 The relation type of a link conveyed in the Link header field is
758 conveyed in the "rel" parameter's value. The rel parameter MUST be
759 present but MUST NOT appear more than once in a given link-value;
760 occurrences after the first MUST be ignored by parsers.
762 The rel parameter can, however, contain multiple link relation types.
763 When this occurs, it establishes multiple links that share the same
764 context, target, and target attributes.
766 The "rev" parameter has been used in the past to indicate that the
767 semantics of the relationship are in the reverse direction. That is,
768 a link from A to B with
REL="X" expresses the same relationship as a
769 link from B to A with
REV="X". rev is deprecated by this
770 specification because it often confuses authors and readers; in most
771 cases, using a separate relation type is preferable.
773 The ABNF for the rel and rev parameters' values is:
775 relation-type *(
1*SP relation-type )
779 relation-type = reg-rel-type / ext-rel-type
780 reg-rel-type = LOALPHA *( LOALPHA / DIGIT / "." / "-" )
781 ext-rel-type = URI ;
<a href=
"./rfc3986#section-3">Section
3 of [RFC3986]
</a>
783 Note that extension relation types are REQUIRED to be absolute URIs
784 in Link header fields and MUST be quoted when they contain characters
785 not allowed in tokens, such as a semicolon (";") or comma (",") (as
786 these characters are used as delimiters in the header field itself).
788 <span class=
"h3"><a class=
"selflink" name=
"section-3.4" href=
"#section-3.4">3.4</a>. Target Attributes
</span>
790 The Link header field defines several target attributes specific to
791 this serialisation and also allows extension target attributes.
792 Target attributes are serialised in the Link header field as
793 parameters (see
<a href=
"./rfc7231#section-3.1.1.1">[RFC7231], Section
3.1.1.1</a> for the definition of
796 <span class=
"h4"><a class=
"selflink" name=
"section-3.4.1" href=
"#section-3.4.1">3.4.1</a>. Serialisation-Defined Attributes
</span>
798 The "hreflang", "media", "title", "title*", and "type" link-params
799 can be translated to serialisation-defined target attributes for the
806 <span class=
"grey">Nottingham Standards Track [Page
11]
</span></pre>
807 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-12" id=
"page-12" href=
"#page-12" class=
"invisible"> </a>
808 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
811 The "hreflang" attribute, when present, is a hint indicating what the
812 language of the result of dereferencing the link should be. Note
813 that this is only a hint; for example, it does not override the
814 Content-Language header field of a HTTP response obtained by actually
815 following the link. Multiple hreflang attributes on a single link-
816 value indicate that multiple languages are available from the
819 The ABNF for the hreflang parameter's value is:
823 The "media" attribute, when present, is used to indicate intended
824 destination medium or media for style information (see
825 [
<a href=
"#ref-W3C.REC-html5-20141028" title=
""HTML5"">W3C.REC-html5-
20141028</a>], Section
4.2.4). Its value MUST be quoted
826 if it contains a semicolon (";") or comma (","). There MUST NOT be
827 more than one media attribute in a link-value; occurrences after the
828 first MUST be ignored by parsers.
830 The ABNF for the media parameter's value is:
834 The "title" attribute, when present, is used to label the destination
835 of a link such that it can be used as a human-readable identifier
836 (e.g., a menu entry) in the language indicated by the Content-
837 Language header field (if present). The title attribute MUST NOT
838 appear more than once in a given link; occurrences after the first
839 MUST be ignored by parsers.
841 The "title*" link-param can be used to encode this attribute in a
842 different character set and/or contain language information as per
843 [
<a href=
"./rfc8187" title=
""Indicating Character Encoding and Language for HTTP Header Field Parameters"">RFC8187
</a>]. The title* link-param MUST NOT appear more than once in a
844 given link-value; occurrences after the first MUST be ignored by
845 parsers. If the attribute does not contain language information, its
846 language is indicated by the Content-Language header field (when
849 If both the title and title* link-params appear in a link,
850 applications SHOULD use the title* link-param's value for the title
853 The "type" attribute, when present, is a hint indicating what the
854 media type of the result of dereferencing the link should be. Note
855 that this is only a hint; for example, it does not override the
856 Content-Type header field of a HTTP response obtained by actually
862 <span class=
"grey">Nottingham Standards Track [Page
12]
</span></pre>
863 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-13" id=
"page-13" href=
"#page-13" class=
"invisible"> </a>
864 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
867 following the link. The type attribute MUST NOT appear more than
868 once in a given link-value; occurrences after the first MUST be
871 The ABNF for the type parameter's value is:
873 type-name "/" subtype-name ; see
<a href=
"./rfc6838#section-4.2">Section
4.2 of [RFC6838]
</a>
875 <span class=
"h4"><a class=
"selflink" name=
"section-3.4.2" href=
"#section-3.4.2">3.4.2</a>. Extension Attributes
</span>
877 Other link-params are link-extensions and are to be considered as
880 Such target attributes MAY be defined to use the encoding in
881 [
<a href=
"./rfc8187" title=
""Indicating Character Encoding and Language for HTTP Header Field Parameters"">RFC8187
</a>] (e.g., "example" and "example*"). When both forms are
882 present, they SHOULD be considered to be the same target attribute;
883 applications SHOULD use the value of the name ending in "*" (after
884 [
<a href=
"./rfc8187" title=
""Indicating Character Encoding and Language for HTTP Header Field Parameters"">RFC8187
</a>] decoding) but MAY fall back to the other value if there is
885 an error in decoding it, or if they do not support decoding.
887 <span class=
"h3"><a class=
"selflink" name=
"section-3.5" href=
"#section-3.5">3.5</a>. Link Header Field Examples
</span>
891 Link:
<http://example.com/TheBook/chapter2
>;
rel="previous";
892 title="previous chapter"
894 indicates that "chapter2" is previous to this resource in a logical
899 Link:
</
>;
rel="http://example.net/foo"
901 indicates that the root resource ("/") is related to this resource
902 with the extension relation type "http://example.net/foo".
906 Link:
</terms
>;
rel="copyright";
anchor="#foo"
908 indicates that the linked copyright terms only apply to the portion
909 of the document indicated by the (media type-specific) fragment
912 The example below shows an instance of the Link header field encoding
913 multiple links and also the use of the encoding from
<a href=
"./rfc8187">RFC
8187</a> to
914 encode both non-ASCII characters and language information.
918 <span class=
"grey">Nottingham Standards Track [Page
13]
</span></pre>
919 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-14" id=
"page-14" href=
"#page-14" class=
"invisible"> </a>
920 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
923 Link:
</TheBook/chapter2
>;
924 rel="previous"; title*=UTF-
8'de'letztes%
20Kapitel,
925 </TheBook/chapter4
>;
926 rel="next"; title*=UTF-
8'de'n%c3%a4chstes%
20Kapitel
928 Here, both links have titles encoded in UTF-
8, both use the German
929 language ("de"), and the second link contains the Unicode code point
930 U+
00E4 ("LATIN SMALL LETTER A WITH DIAERESIS").
932 Note that link-values can convey multiple links between the same link
933 target and link context; for example:
935 Link:
<http://example.org/
>;
936 rel="start http://example.net/relation/other"
938 Here, the link to "http://example.org/" has the registered relation
939 type "start" and the extension relation type
940 "http://example.net/relation/other".
942 Finally, this header field:
944 Link:
<https://example.org/
>;
rel="start",
945 <https://example.org/index
>;
rel="index"
947 is equivalent to these:
949 Link:
<https://example.org/
>;
rel="start"
950 Link:
<https://example.org/index
>;
rel="index"
952 <span class=
"h2"><a class=
"selflink" name=
"section-4" href=
"#section-4">4</a>. IANA Considerations
</span>
954 <span class=
"h3"><a class=
"selflink" name=
"section-4.1" href=
"#section-4.1">4.1</a>. Link HTTP Header Field Registration
</span>
956 This specification updates the "Message Headers" registry entry for
957 "Link" in HTTP [
<a href=
"./rfc3864" title=
""Registration Procedures for Message Header Fields"">RFC3864
</a>] to refer to this document.
959 Header Field Name: Link
962 Reference:
<a href=
"./rfc8288">RFC
8288</a>
964 <span class=
"h3"><a class=
"selflink" name=
"section-4.2" href=
"#section-4.2">4.2</a>. Link Relation Type Registry
</span>
966 This specification updates the registration procedures for the "Link
967 Relation Types" registry; see
<a href=
"#section-2.1.1.1">Section
2.1.1.1</a>. Also, all references
968 to
<a href=
"./rfc5988">RFC
5988</a> in that registry have been replaced with references to
974 <span class=
"grey">Nottingham Standards Track [Page
14]
</span></pre>
975 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-15" id=
"page-15" href=
"#page-15" class=
"invisible"> </a>
976 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
979 IANA will direct any incoming requests regarding the registry to this
980 document and, if defined, the processes established by the expert(s);
981 typically, this will mean referring them to the registry Web page.
983 Note that the expert(s) is allowed (as per
<a href=
"#section-2.1.1.1">Section
2.1.1.1</a>) to define
984 additional fields to be collected in the registry.
986 <span class=
"h3"><a class=
"selflink" name=
"section-4.3" href=
"#section-4.3">4.3</a>. Link Relation Application Data Registry
</span>
988 Per this specification, IANA has removed the "Link Relation
989 Application Data" registry, as it has not been used, and future use
992 <span class=
"h2"><a class=
"selflink" name=
"section-5" href=
"#section-5">5</a>. Security Considerations
</span>
994 The content of the Link header field is not secure, private, or
995 integrity-guaranteed. Use of Transport Layer Security (TLS) with
996 HTTP [
<a href=
"./rfc2818" title=
""HTTP Over TLS"">RFC2818
</a>] is currently the only end-to-end way to provide these
999 Link applications ought to consider the attack vectors opened by
1000 automatically following, trusting, or otherwise using links gathered
1001 from HTTP header fields.
1003 For example, Link header fields that use the "anchor" parameter to
1004 associate a link's context with another resource cannot be trusted
1005 since they are effectively assertions by a third party that could be
1006 incorrect or malicious. Applications can mitigate this risk by
1007 specifying that such links should be discarded unless some
1008 relationship between the resources is established (e.g., they share
1009 the same authority).
1011 Dereferencing links has a number of risks, depending on the
1012 application in use. For example, the Referer header [
<a href=
"./rfc7231" title=
""Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content"">RFC7231
</a>] can
1013 expose information about the application's state (including private
1014 information) in its value. Likewise, cookies [
<a href=
"./rfc6265" title=
""HTTP State Management Mechanism"">RFC6265
</a>] are another
1015 mechanism that, if used, can become an attack vector. Applications
1016 can mitigate these risks by carefully specifying how such mechanisms
1019 The Link header field makes extensive use of IRIs and URIs. See
1020 <a href=
"./rfc3987#section-8">[RFC3987], Section
8</a> for security considerations relating to IRIs.
1021 See
<a href=
"./rfc3986#section-7">[RFC3986], Section
7</a> for security considerations relating to
1022 URIs. See
<a href=
"./rfc7230#section-9">[RFC7230], Section
9</a> for security considerations relating
1023 to HTTP header fields.
1030 <span class=
"grey">Nottingham Standards Track [Page
15]
</span></pre>
1031 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-16" id=
"page-16" href=
"#page-16" class=
"invisible"> </a>
1032 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
1035 <span class=
"h2"><a class=
"selflink" name=
"section-6" href=
"#section-6">6</a>. Internationalisation Considerations
</span>
1037 Link targets may need to be converted to URIs in order to express
1038 them in serialisations that do not support IRIs. This includes the
1039 Link HTTP header field.
1041 Similarly, the anchor parameter of the Link header field does not
1042 support IRIs; therefore, IRIs must be converted to URIs before
1045 Relation types are defined as URIs, not IRIs, to aid in their
1046 comparison. It is not expected that they will be displayed to end
1049 Note that registered Relation Names are required to be lowercase
1052 <span class=
"h2"><a class=
"selflink" name=
"section-7" href=
"#section-7">7</a>. References
</span>
1054 <span class=
"h3"><a class=
"selflink" name=
"section-7.1" href=
"#section-7.1">7.1</a>. Normative References
</span>
1056 [
<a name=
"ref-RFC2119" id=
"ref-RFC2119">RFC2119
</a>] Bradner, S., "Key words for use in RFCs to Indicate
1057 Requirement Levels",
<a href=
"./bcp14">BCP
14</a>,
<a href=
"./rfc2119">RFC
2119</a>,
1058 DOI
10.17487/RFC2119, March
1997,
1059 <<a href=
"https://www.rfc-editor.org/info/rfc2119">https://www.rfc-editor.org/info/rfc2119
</a>>.
1061 [
<a name=
"ref-RFC3864" id=
"ref-RFC3864">RFC3864
</a>] Klyne, G., Nottingham, M., and J. Mogul, "Registration
1062 Procedures for Message Header Fields",
<a href=
"./bcp90">BCP
90</a>,
<a href=
"./rfc3864">RFC
3864</a>,
1063 DOI
10.17487/RFC3864, September
2004,
1064 <<a href=
"https://www.rfc-editor.org/info/rfc3864">https://www.rfc-editor.org/info/rfc3864
</a>>.
1066 [
<a name=
"ref-RFC3986" id=
"ref-RFC3986">RFC3986
</a>] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
1067 Resource Identifier (URI): Generic Syntax", STD
66,
1068 <a href=
"./rfc3986">RFC
3986</a>, DOI
10.17487/RFC3986, January
2005,
1069 <<a href=
"https://www.rfc-editor.org/info/rfc3986">https://www.rfc-editor.org/info/rfc3986
</a>>.
1071 [
<a name=
"ref-RFC3987" id=
"ref-RFC3987">RFC3987
</a>] Duerst, M. and M. Suignard, "Internationalized Resource
1072 Identifiers (IRIs)",
<a href=
"./rfc3987">RFC
3987</a>, DOI
10.17487/RFC3987,
1073 January
2005,
<<a href=
"https://www.rfc-editor.org/info/rfc3987">https://www.rfc-editor.org/info/rfc3987
</a>>.
1075 [
<a name=
"ref-RFC5234" id=
"ref-RFC5234">RFC5234
</a>] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
1076 Specifications: ABNF", STD
68,
<a href=
"./rfc5234">RFC
5234</a>,
1077 DOI
10.17487/RFC5234, January
2008,
1078 <<a href=
"https://www.rfc-editor.org/info/rfc5234">https://www.rfc-editor.org/info/rfc5234
</a>>.
1080 [
<a name=
"ref-RFC5646" id=
"ref-RFC5646">RFC5646
</a>] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying
1081 Languages",
<a href=
"./bcp47">BCP
47</a>,
<a href=
"./rfc5646">RFC
5646</a>, DOI
10.17487/RFC5646,
1082 September
2009,
<<a href=
"https://www.rfc-editor.org/info/rfc5646">https://www.rfc-editor.org/info/rfc5646
</a>>.
1086 <span class=
"grey">Nottingham Standards Track [Page
16]
</span></pre>
1087 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-17" id=
"page-17" href=
"#page-17" class=
"invisible"> </a>
1088 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
1091 [
<a name=
"ref-RFC6838" id=
"ref-RFC6838">RFC6838
</a>] Freed, N., Klensin, J., and T. Hansen, "Media Type
1092 Specifications and Registration Procedures",
<a href=
"./bcp13">BCP
13</a>,
1093 <a href=
"./rfc6838">RFC
6838</a>, DOI
10.17487/RFC6838, January
2013,
1094 <<a href=
"https://www.rfc-editor.org/info/rfc6838">https://www.rfc-editor.org/info/rfc6838
</a>>.
1096 [
<a name=
"ref-RFC7230" id=
"ref-RFC7230">RFC7230
</a>] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
1097 Protocol (HTTP/
1.1): Message Syntax and Routing",
1098 <a href=
"./rfc7230">RFC
7230</a>, DOI
10.17487/RFC7230, June
2014,
1099 <<a href=
"https://www.rfc-editor.org/info/rfc7230">https://www.rfc-editor.org/info/rfc7230
</a>>.
1101 [
<a name=
"ref-RFC7231" id=
"ref-RFC7231">RFC7231
</a>] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
1102 Protocol (HTTP/
1.1): Semantics and Content",
<a href=
"./rfc7231">RFC
7231</a>,
1103 DOI
10.17487/RFC7231, June
2014,
1104 <<a href=
"https://www.rfc-editor.org/info/rfc7231">https://www.rfc-editor.org/info/rfc7231
</a>>.
1106 [
<a name=
"ref-RFC8126" id=
"ref-RFC8126">RFC8126
</a>] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
1107 Writing an IANA Considerations Section in RFCs",
<a href=
"./bcp26">BCP
26</a>,
1108 <a href=
"./rfc8126">RFC
8126</a>, DOI
10.17487/RFC8126, June
2017,
1109 <<a href=
"https://www.rfc-editor.org/info/rfc8126">https://www.rfc-editor.org/info/rfc8126
</a>>.
1111 [
<a name=
"ref-RFC8174" id=
"ref-RFC8174">RFC8174
</a>] Leiba, B., "Ambiguity of Uppercase vs Lowercase in
<a href=
"./rfc2119">RFC
</a>
1112 <a href=
"./rfc2119">2119</a> Key Words",
<a href=
"./bcp14">BCP
14</a>,
<a href=
"./rfc8174">RFC
8174</a>, DOI
10.17487/RFC8174,
1113 May
2017,
<<a href=
"https://www.rfc-editor.org/info/rfc8174">https://www.rfc-editor.org/info/rfc8174
</a>>.
1115 [
<a name=
"ref-RFC8187" id=
"ref-RFC8187">RFC8187
</a>] Reschke, J., "Indicating Character Encoding and Language
1116 for HTTP Header Field Parameters",
<a href=
"./rfc8187">RFC
8187</a>,
1117 DOI
10.17487/RFC8187, September
2017,
1118 <<a href=
"https://www.rfc-editor.org/info/rfc8187">https://www.rfc-editor.org/info/rfc8187
</a>>.
1120 [
<a name=
"ref-W3C.REC-css3-mediaqueries-20120619" id=
"ref-W3C.REC-css3-mediaqueries-20120619">W3C.REC-css3-mediaqueries-
20120619</a>]
1121 Rivoal, F., "Media Queries", W3C Recommendation
1122 REC-css3-mediaqueries-
20120619, June
2012,
1123 <<a href=
"http://www.w3.org/TR/2012/REC-css3-mediaqueries-20120619">http://www.w3.org/TR/
2012/
</a>
1124 <a href=
"http://www.w3.org/TR/2012/REC-css3-mediaqueries-20120619">REC-css3-mediaqueries-
20120619</a>>.
1126 <span class=
"h3"><a class=
"selflink" name=
"section-7.2" href=
"#section-7.2">7.2</a>. Informative References
</span>
1128 [
<a name=
"ref-RFC2046" id=
"ref-RFC2046">RFC2046
</a>] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
1129 Extensions (MIME) Part Two: Media Types",
<a href=
"./rfc2046">RFC
2046</a>,
1130 DOI
10.17487/RFC2046, November
1996,
1131 <<a href=
"https://www.rfc-editor.org/info/rfc2046">https://www.rfc-editor.org/info/rfc2046
</a>>.
1133 [
<a name=
"ref-RFC2818" id=
"ref-RFC2818">RFC2818
</a>] Rescorla, E., "HTTP Over TLS",
<a href=
"./rfc2818">RFC
2818</a>,
1134 DOI
10.17487/RFC2818, May
2000,
1135 <<a href=
"https://www.rfc-editor.org/info/rfc2818">https://www.rfc-editor.org/info/rfc2818
</a>>.
1142 <span class=
"grey">Nottingham Standards Track [Page
17]
</span></pre>
1143 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-18" id=
"page-18" href=
"#page-18" class=
"invisible"> </a>
1144 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
1147 [
<a name=
"ref-RFC4287" id=
"ref-RFC4287">RFC4287
</a>] Nottingham, M., Ed. and R. Sayre, Ed., "The Atom
1148 Syndication Format",
<a href=
"./rfc4287">RFC
4287</a>, DOI
10.17487/RFC4287,
1149 December
2005,
<<a href=
"https://www.rfc-editor.org/info/rfc4287">https://www.rfc-editor.org/info/rfc4287
</a>>.
1151 [
<a name=
"ref-RFC6265" id=
"ref-RFC6265">RFC6265
</a>] Barth, A., "HTTP State Management Mechanism",
<a href=
"./rfc6265">RFC
6265</a>,
1152 DOI
10.17487/RFC6265, April
2011,
1153 <<a href=
"https://www.rfc-editor.org/info/rfc6265">https://www.rfc-editor.org/info/rfc6265
</a>>.
1155 [
<a name=
"ref-W3C.REC-html5-20141028" id=
"ref-W3C.REC-html5-20141028">W3C.REC-html5-
20141028</a>]
1156 Hickson, I., Berjon, R., Faulkner, S., Leithead, T.,
1157 Navara, E., O'Connor, T., and S. Pfeiffer, "HTML5", W3C
1158 Recommendation REC-html5-
20141028, October
2014,
1159 <<a href=
"http://www.w3.org/TR/2014/REC-html5-20141028">http://www.w3.org/TR/
2014/REC-html5-
20141028</a>>.
1198 <span class=
"grey">Nottingham Standards Track [Page
18]
</span></pre>
1199 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-19" id=
"page-19" href=
"#page-19" class=
"invisible"> </a>
1200 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
1203 <span class=
"h2"><a class=
"selflink" name=
"appendix-A" href=
"#appendix-A">Appendix A
</a>. Notes on Other Link Serialisations
</span>
1205 Header fields (
<a href=
"#section-3">Section
3</a>) are only one serialisation of links; other
1206 specifications have defined alternative serialisations.
1208 <span class=
"h3"><a class=
"selflink" name=
"appendix-A.1" href=
"#appendix-A.1">A
.1</a>. Link Serialisation in HTML
</span>
1210 HTML motivated the original syntax of the Link header field, and many
1211 of the design decisions in this document are driven by a desire to
1212 stay compatible with it.
1214 In HTML, the link element can be mapped to links as specified here by
1215 using the "href" attribute for the target URI, and "rel" to convey
1216 the relation type, as in the Link header field. The context of the
1217 link is the URI associated with the entire HTML document. HTML also
1218 defines several attributes on links that can be seen as target
1219 attributes, including "media", "hreflang", "type", and "sizes".
1221 <a href=
"#section-4.8">Section
4.8</a> of HTML5 [
<a href=
"#ref-W3C.REC-html5-20141028" title=
""HTML5"">W3C.REC-html5-
20141028</a>] defines modern HTML
1222 links. That document links to the Microformats Wiki as a registry;
1223 over time, the IANA registry ought to mirror its contents and,
1224 ideally, eventually replace it (although that depends on the HTML
1227 Surveys of existing HTML content have shown that unregistered link
1228 relation types that are not URIs are (perhaps inevitably) common.
1229 Consuming HTML implementations ought not consider such unregistered
1230 short links to be errors, but rather relation types with a local
1231 scope (i.e., their meaning is specific and perhaps private to that
1234 Finally, the HTML specification gives a special meaning when the
1235 "alternate" relation types coincide with other relation types in the
1236 same link. Such links ought to be serialised in the Link header
1237 field using a single list of relation-types (e.g.,
rel="alternate
1238 stylesheet") to preserve this relationship.
1240 <span class=
"h3"><a class=
"selflink" name=
"appendix-A.2" href=
"#appendix-A.2">A
.2</a>. Link Serialisation in Atom
</span>
1242 Atom [
<a href=
"./rfc4287" title=
""The Atom Syndication Format"">RFC4287
</a>] is a link serialisation that conveys links in the
1243 atom:link element, with the "href" attribute indicating the link
1244 target and the "rel" attribute containing the relation type. The
1245 context of the link is either a feed locator or an entry ID,
1246 depending on where it appears; generally, feed-level links are
1247 obvious candidates for transmission as a Link header field.
1249 When serialising an atom:link into a Link header field, it is
1250 necessary to convert link targets (if used) to URIs.
1254 <span class=
"grey">Nottingham Standards Track [Page
19]
</span></pre>
1255 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-20" id=
"page-20" href=
"#page-20" class=
"invisible"> </a>
1256 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
1259 Atom defines extension relation types in terms of IRIs. This
1260 specification redefines them as URIs, to simplify and reduce errors
1261 in their comparison.
1263 Atom allows registered link relation types to be serialised as
1264 absolute URIs using a prefix, "
<a href=
"http://www.iana.org/assignments/relation/">http://www.iana.org/assignments/
</a>
1265 <a href=
"http://www.iana.org/assignments/relation/">relation/
</a>". This prefix is specific to the Atom serialisation.
1267 Furthermore, link relation types are always compared in a case-
1268 sensitive fashion; therefore, registered link relation types SHOULD
1269 be converted to their registered form (usually, lowercase) when
1270 serialised in an Atom document.
1272 Note also that while the Link header field allows multiple relations
1273 to be serialised in a single link, atom:link does not. In this case,
1274 a single link-value may map to several atom:link elements.
1276 As with HTML, atom:link defines some attributes that are not
1277 explicitly mirrored in the Link header field syntax, but they can
1278 also be used as link-extensions to maintain fidelity.
1280 <span class="h2
"><a class="selflink
" name="appendix-B
" href="#appendix-B
">Appendix B</a>. Algorithms for Parsing Link Header Fields</span>
1282 This appendix outlines a set of non-normative algorithms: for parsing
1283 the Link header(s) out of a header set, for parsing a Link header
1284 field value, and algorithms for parsing generic parts of the field
1287 These algorithms are more permissive than the ABNF defining the
1288 syntax might suggest; the error handling embodied in them is a
1289 reasonable approach, but not one that is required. As such they are
1290 advisory only, and in cases where there is disagreement, the correct
1291 behaviour is defined by the body of this specification.
1293 <span class="h3
"><a class="selflink
" name="appendix-B
.1" href="#appendix-B
.1">B.1</a>. Parsing a Header Set for Links</span>
1295 This algorithm can be used to parse the Link header fields that a
1296 HTTP header set contains. Given a header_set of (string field_name,
1297 string field_value) pairs, assuming ASCII encoding, it returns a list
1300 1. Let field_values be a list containing the members of header_set
1301 whose field_name is a case-insensitive match for "link".
1303 2. Let links be an empty list.
1310 <span class=
"grey">Nottingham Standards Track [Page
20]
</span></pre>
1311 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-21" id=
"page-21" href=
"#page-21" class=
"invisible"> </a>
1312 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
1315 3. For each field_value in field_values:
1316 1. Let value_links be the result of Parsing a Link Field Value
1317 (Appendix B
.2) from field_value.
1318 2. Append each member of value_links to links.
1322 <span class=
"h3"><a class=
"selflink" name=
"appendix-B.2" href=
"#appendix-B.2">B
.2</a>. Parsing a Link Field Value
</span>
1324 This algorithm parses zero or more comma-separated link-values from a
1325 Link header field. Given a string field_value, assuming ASCII
1326 encoding, it returns a list of link objects.
1328 1. Let links be an empty list.
1330 2. While field_value has content:
1331 1. Consume any leading OWS.
1332 2. If the first character is not "
<", return links.
1333 3. Discard the first character ("
<").
1334 4. Consume up to but not including the first "
>" character or
1335 end of field_value and let the result be target_string.
1336 5. If the next character is not "
>", return links.
1337 6. Discard the leading "
>" character.
1338 7. Let link_parameters be the result of Parsing Parameters
1339 (Appendix B
.3) from field_value (consuming zero or more
1341 8. Let target_uri be the result of relatively resolving (as per
1342 <a href=
"./rfc3986#section-5.2">[RFC3986], Section
5.2</a>) target_string. Note that any base
1343 URI carried in the payload body is NOT used.
1344 9. Let relations_string be the second item of the first tuple
1345 of link_parameters whose first item matches the string "rel"
1346 or the empty string ("") if it is not present.
1347 10. Split relations_string on RWS (removing it in the process)
1348 into a list of string relation_types.
1349 11. Let context_string be the second item of the first tuple of
1350 link_parameters whose first item matches the string
1351 "anchor". If it is not present, context_string is the URL
1352 of the representation carrying the Link header
<a href=
"./rfc7231#section-3.1.4.1">[RFC7231],
1353 Section
3.1.4.1</a>, serialised as a URI. Where the URL is
1354 anonymous, context_string is null.
1355 12. Let context_uri be the result of relatively resolving (as
1356 per
<a href=
"./rfc3986#section-5.2">[RFC3986], Section
5.2</a>) context_string, unless
1357 context_string is null, in which case context is null. Note
1358 that any base URI carried in the payload body is NOT used.
1359 13. Let target_attributes be an empty list.
1366 <span class=
"grey">Nottingham Standards Track [Page
21]
</span></pre>
1367 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-22" id=
"page-22" href=
"#page-22" class=
"invisible"> </a>
1368 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
1371 14. For each tuple (param_name, param_value) of link_parameters:
1372 1. If param_name matches "rel" or "anchor", skip this
1374 2. If param_name matches "media", "title", "title*", or
1375 "type" and target_attributes already contains a tuple
1376 whose first element matches the value of param_name,
1378 3. Append (param_name, param_value) to target_attributes.
1379 15. Let star_param_names be the set of param_names in the
1380 (param_name, param_value) tuples of link_parameters where
1381 the last character of param_name is an asterisk ("*").
1382 16. For each star_param_name in star_param_names:
1383 1. Let base_param_name be star_param_name with the last
1385 2. If the implementation does not choose to support an
1386 internationalised form of a parameter named
1387 base_param_name for any reason (including, but not
1388 limited to, it being prohibited by the parameter's
1389 specification), remove all tuples from link_parameters
1390 whose first member is star_param_name, and skip to the
1391 next star_param_name.
1392 3. Remove all tuples from link_parameters whose first
1393 member is base_param_name.
1394 4. Change the first member of all tuples in link_parameters
1395 whose first member is star_param_name to
1397 17. For each relation_type in relation_types:
1398 1. Case-normalise relation_type to lowercase.
1399 2. Append a link object to links with the target
1400 target_uri, relation type of relation_type, context of
1401 context_uri, and target attributes target_attributes.
1405 <span class=
"h3"><a class=
"selflink" name=
"appendix-B.3" href=
"#appendix-B.3">B
.3</a>. Parsing Parameters
</span>
1407 This algorithm parses the parameters from a header field value.
1408 Given input, an ASCII string, it returns a list of (string
1409 parameter_name, string parameter_value) tuples that it contains.
1410 input is modified to remove the parsed parameters.
1412 1. Let parameters be an empty list.
1414 2. While input has content:
1415 1. Consume any leading OWS.
1416 2. If the first character is not ";", return parameters.
1417 3. Discard the leading ";" character.
1418 4. Consume any leading OWS.
1422 <span class=
"grey">Nottingham Standards Track [Page
22]
</span></pre>
1423 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-23" id=
"page-23" href=
"#page-23" class=
"invisible"> </a>
1424 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
1427 5. Consume up to but not including the first BWS, "=", ";", or
1428 "," character, or up to the end of input, and let the result
1430 6. Consume any leading BWS.
1431 7. If the next character is "=":
1432 1. Discard the leading "=" character.
1433 2. Consume any leading BWS.
1434 3. If the next character is DQUOTE, let parameter_value be
1435 the result of Parsing a Quoted String (Appendix B
.4)
1436 from input (consuming zero or more characters of it).
1437 4. Else, consume the contents up to but not including the
1438 first ";" or "," character, or up to the end of input,
1439 and let the results be parameter_value.
1440 5. If the last character of parameter_name is an asterisk
1441 ("*"), decode parameter_value according to [
<a href=
"./rfc8187" title=
""Indicating Character Encoding and Language for HTTP Header Field Parameters"">RFC8187
</a>].
1442 Continue processing input if an unrecoverable error is
1445 1. Let parameter_value be an empty string.
1446 9. Case-normalise parameter_name to lowercase.
1447 10. Append (parameter_name, parameter_value) to parameters.
1448 11. Consume any leading OWS.
1449 12. If the next character is "," or the end of input, stop
1450 processing input and return parameters.
1452 <span class=
"h3"><a class=
"selflink" name=
"appendix-B.4" href=
"#appendix-B.4">B
.4</a>. Parsing a Quoted String
</span>
1454 This algorithm parses a quoted string, as per
<a href=
"./rfc7230#section-3.2.6">[RFC7230],
1455 Section
3.2.6</a>. Given input, an ASCII string, it returns an unquoted
1456 string. input is modified to remove the parsed string.
1458 1. Let output be an empty string.
1460 2. If the first character of input is not DQUOTE, return output.
1462 3. Discard the first character.
1464 4. While input has content:
1465 1. If the first character is a backslash ("\"):
1466 1. Discard the first character.
1467 2. If there is no more input, return output.
1468 3. Else, consume the first character and append it to
1470 2. Else, if the first character is DQUOTE, discard it and return
1472 3. Else, consume the first character and append it to output.
1478 <span class=
"grey">Nottingham Standards Track [Page
23]
</span></pre>
1479 <hr class='noprint' style='width:
96ex;' align='left'
/><!--NewPage--><pre class='newpage'
><a name=
"page-24" id=
"page-24" href=
"#page-24" class=
"invisible"> </a>
1480 <span class=
"grey"><a href=
"./rfc8288">RFC
8288</a> Web Linking October
2017</span>
1483 <span class=
"h2"><a class=
"selflink" name=
"appendix-C" href=
"#appendix-C">Appendix C
</a>. Changes from
<a href=
"./rfc5988">RFC
5988</a></span>
1485 This specification has the following differences from its
1486 predecessor,
<a href=
"./rfc5988">RFC
5988</a>:
1488 o The initial relation type registrations were removed, since
1489 they've already been registered by
<a href=
"./rfc5988">RFC
5988</a>.
1490 o The introduction has been shortened.
1491 o The "Link Relation Application Data" registry has been removed.
1492 o Incorporated errata.
1493 o Updated references.
1494 o Link cardinality was clarified.
1495 o Terminology was changed from "target IRI" and "context IRI" to
1496 "link target" and "link context", respectively.
1497 o Made assigning a URI to registered relation types serialisation
1499 o Removed misleading statement that the Link header field is
1500 semantically equivalent to HTML and Atom links.
1501 o More carefully defined and used "link serialisations" and "link
1503 o Clarified the cardinality of target attributes (generically and
1505 o Corrected the default link context for the Link header field, to
1506 be dependent upon the identity of the representation (as per
1507 <a href=
"./rfc7231">RFC
7231</a>).
1508 o Defined a suggested parsing algorithm for the Link header.
1509 o The value space of target attributes and their definition has been
1511 o The ABNF has been updated to be compatible with [
<a href=
"./rfc7230" title=
""Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing"">RFC7230
</a>]. In
1512 particular, whitespace is now explicit.
1513 o Some parameters on the HTTP header field can now appear as a
1515 o Parameters on the HTTP header can now be valueless.
1516 o Handling of quoted strings is now defined by [
<a href=
"./rfc7230" title=
""Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing"">RFC7230
</a>].
1517 o The "type" header field parameter now needs to be quoted (as
1518 "token" does not allow "/").
1524 Email: mnot@mnot.net
1525 URI:
<a href=
"https://www.mnot.net/">https://www.mnot.net/
</a>
1534 Nottingham Standards Track [Page
24]
1537 <span class=
"noprint"><small><small>Html markup produced by rfcmarkup
1.129d, available from
1538 <a href=
"https://tools.ietf.org/tools/rfcmarkup/">https://tools.ietf.org/tools/rfcmarkup/
</a>
1539 </small></small></span>