<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.39 (Ruby 3.2.2) -->
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpapi-link-hint-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title>HTTP Link Hints</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-link-hint-00"/>
    <author initials="M." surname="Nottingham" fullname="Mark Nottingham">
      <organization/>
      <address>
        <email>mnot@mnot.net</email>
        <uri>https://www.mnot.net/</uri>
      </address>
    </author>
    <date/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 33?>

<t>This memo specifies "HTTP Link Hints", a mechanism for annotating Web links to HTTP(S) resources with information that otherwise might be discovered by interacting with them.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-httpapi.github.io/link-hint/draft-ietf-httpapi-link-hint.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpapi-link-hint/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Building Blocks for HTTP APIs Working Group mailing list (<eref target="mailto:httpapi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/httpapi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/httpapi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-httpapi/link-lint"/>.</t>
    </note>
  </front>
  <middle>
    <?line 38?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>HTTP <xref target="RFC7230"/> clients can discover a variety of information about a resource by interacting with it. For example, the methods supported can be learned through the Allow response header field, and the need for authentication is conveyed with a 401 Authentication Required status code.</t>
      <t>Often, it can be beneficial to know this information before interacting with the resource; not only can such knowledge save time (through reduced round trips), but it can also affect the choices available to the code or user driving the interaction.</t>
      <t>For example, a user interface that presents the data from an HTTP-based API might need to know which resources the user has write access to, so that it can present the appropriate interface.</t>
      <t>This specification defines a vocabulary of "HTTP link hints" that allow such metadata about HTTP resources to be attached to Web links <xref target="RFC8288"/>, thereby making it available before the link is followed. It also establishes a registry for future hints.</t>
      <t>Hints are just that -- they are not a "contract", and are to only be taken as advisory. The runtime behaviour of the resource always overrides hinted information.</t>
      <t>For example, a client might receive a hint that the PUT method is allowed on all "widget" resources. This means that generally, the client can PUT to them, but a specific resource might reject a PUT based upon access control or other considerations.</t>
      <t>More fine-grained information might also be gathered by interacting with the resource (e.g., via a GET), or by another resource "containing" it (such as a "widgets" collection) or describing it (e.g., one linked to it with a "describedby" link relation).</t>
      <t>There is not a single way to carry hints in a link; rather, it is expected that this will be done by individual link serialisations (see <xref target="RFC8288"/>, Section 3.4.1). However, <xref target="link_header"/> does recommend how to include link hints in the existing Link HTTP header field.</t>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="link_hints">
      <name>HTTP Link Hints</name>
      <t>A HTTP link hint is a (key, value) tuple that describes the target resource of a Web link <xref target="RFC8288"/>, or the link itself. The value's canonical form is a JSON <xref target="RFC8259"/> data structure specific to that hint.</t>
      <t>Typically, link hints are serialised in links as target attributes (<xref target="RFC8288"/>, Section 3.4.1).</t>
      <t>In JSON-based formats, this can be achieved by simply serialising link hints as an object; for example:</t>
      <sourcecode type="json"><![CDATA[
{
  "_links": {
    "self": {
      "href": "/orders/523",
       "hints": {
        "allow": ["GET", "POST"],
        "accept-post": {
          "application/example+json":
            {}
        }
      }
    }
  }
}
]]></sourcecode>
      <t>In other link formats, this requires a mapping from the canonical JSON data model. One such mapping is described in <xref target="link_header"/> for the Link HTTP header field.</t>
      <t>The information in a link hint SHOULD NOT be considered valid for longer than the freshness lifetime (<xref target="RFC7234"/>, Section 4.2) of the representation that the link occurred within, and in some cases, it might be valid for a considerably shorter period.</t>
      <t>Likewise, the information in a link hint is specific to the link it is attached to. This means that if a representation is specific to a particular user, the hints on links in that representation are also specific to that user.</t>
    </section>
    <section anchor="hints">
      <name>Pre-Defined HTTP Link Hints</name>
      <section anchor="allow">
        <name>allow</name>
        <ul spacing="normal">
          <li>Hint Name: allow</li>
          <li>Description: Hints the HTTP methods that can be used to interact with the target resource; equivalent to the Allow HTTP response header.</li>
          <li>Content Model: array (of strings)</li>
          <li>Specification: [this document]</li>
        </ul>
        <t>Content MUST be an array of strings, containing HTTP methods (<xref target="RFC7231"/>, Section 4).</t>
      </section>
      <section anchor="formats">
        <name>formats</name>
        <ul spacing="normal">
          <li>Hint Name: formats</li>
          <li>Description: Hints the representation type(s) that the target resource can produce and consume, using the GET and PUT (if allowed) methods respectively.</li>
          <li>Content Model: object</li>
          <li>Specification: [this document]</li>
        </ul>
        <t>Content MUST be an object, whose keys are media types (<xref target="RFC7231"/>, Section 3.1.1.1), and values are objects.</t>
        <t>The object MAY have a "links" member, whose value is an object representing links (in the sense of <xref target="RFC8288"/>) whose context is any document that uses that format. Generally, this will be schema or profile (<xref target="RFC6906"/>) information. The "links" member has the same format as the "links" hint.</t>
        <t>Furthermore, the object MAY have a "deprecated" member, whose value is either true or false, indicating whether support for the format might be removed in the near future.</t>
        <t>All other members of the object are under control of the corresponding media type's definition.</t>
      </section>
      <section anchor="links">
        <name>links</name>
        <ul spacing="normal">
          <li>Hint Name: links</li>
          <li>Description: Hints at links whose context is the target resource.</li>
          <li>Content Model: object</li>
          <li>Specification: [this document]</li>
        </ul>
        <t>The "links" hint contains links (in the sense of <xref target="RFC8288"/>) whose context is the hinted target resource, which are stable for the lifetime of the hint.</t>
        <t>Content MUST be an object, whose member names are link relations (<xref target="RFC8288"/>) and values are objects that MUST have an "href" member whose value is a URI-reference (<xref target="RFC3986"/>, using the original link as the base for resolution) for the link hint's target resource, and MAY itself contain link hints, serialised as the value for a "hints" member.</t>
        <t>For example:</t>
        <sourcecode type="json"><![CDATA[
"links": {
  "edit-form": {
    "href": "./edit",
    "hints": {
      "formats": {
        "application/json": {}
      }
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="accept-post">
        <name>accept-post</name>
        <ul spacing="normal">
          <li>Hint Name: accept-post</li>
          <li>Description: Hints the POST request format(s) that the target resource can consume.</li>
          <li>Content Model: object</li>
          <li>Specification: [this document]</li>
        </ul>
        <t>Content MUST be an object, with the same constraints as for "formats".</t>
        <t>When this hint is present, "POST" SHOULD be listed in the "allow" hint.</t>
      </section>
      <section anchor="accept-patch">
        <name>accept-patch</name>
        <ul spacing="normal">
          <li>Hint Name: accept-patch</li>
          <li>Description: Hints the PATCH <xref target="RFC5789"/> request format(s) that the target resource can consume; equivalent to the Accept-Patch HTTP response header.</li>
          <li>Content Model: array (of strings)</li>
          <li>Specification: [this document]</li>
        </ul>
        <t>Content MUST be an array of strings, containing media types (<xref target="RFC7231"/>, Section 3.1.1.1).</t>
        <t>When this hint is present, "PATCH" SHOULD be listed in the "allow" hint.</t>
      </section>
      <section anchor="accept-ranges">
        <name>accept-ranges</name>
        <ul spacing="normal">
          <li>Hint Name: accept-ranges</li>
          <li>Description: Hints the range-specifier(s) available for the target resource; equivalent to the Accept-Ranges HTTP response header <xref target="RFC7233"/>.</li>
          <li>Content Model: array (of strings)</li>
          <li>Specification: [this document]</li>
        </ul>
        <t>Content MUST be an array of strings, containing HTTP range-specifiers (<xref target="RFC7233"/>, Section 3.1).</t>
      </section>
      <section anchor="accept-prefer">
        <name>accept-prefer</name>
        <ul spacing="normal">
          <li>Hint Name: accept-prefer</li>
          <li>Description: Hints the preference(s) <xref target="RFC7240"/> that the target resource understands (and might act upon) in requests.</li>
          <li>Content Model: array (of strings)</li>
          <li>Specification: [this document]</li>
        </ul>
        <t>Content MUST be an array of strings, contain preferences (<xref target="RFC7240"/>, Section 2). Note that, by its nature, a preference can be ignored by the server.</t>
      </section>
      <section anchor="precondition-req">
        <name>precondition-req</name>
        <ul spacing="normal">
          <li>Hint Name: precondition-req</li>
          <li>Description: Hints that the target resource requires state-changing requests (e.g., PUT, PATCH) to include a precondition, as per <xref target="RFC7232"/>, to avoid conflicts due to concurrent updates.</li>
          <li>Content Model: array (of strings)</li>
          <li>Specification: [this document]</li>
        </ul>
        <t>Content MUST be an array of strings, with possible values "etag" and "last-modified" indicating type of precondition expected.</t>
        <t>See also the 428 Precondition Required status code (<xref target="RFC6585"/>).</t>
      </section>
      <section anchor="auth-schemes">
        <name>auth-schemes</name>
        <ul spacing="normal">
          <li>Hint Name: auth-schemes</li>
          <li>Description: Hints that the target resource requires authentication using the HTTP Authentication Framework <xref target="RFC7235"/>.</li>
          <li>Content Model: array (of objects)</li>
          <li>Specification: [this document]</li>
        </ul>
        <t>Content MUST be an array of objects, each with a "scheme" member containing a string that corresponds to a HTTP authentication scheme (<xref target="RFC7235"/>), and optionally a "realms" member containing an array of zero to many strings that identify protection spaces that the resource is a member of.</t>
        <t>For example:</t>
        <sourcecode type="json"><![CDATA[
  {
    "auth-req": [
      {
        "scheme": "Basic",
        "realms": ["private"]
      }
    ]
  }
]]></sourcecode>
      </section>
      <section anchor="status">
        <name>status</name>
        <ul spacing="normal">
          <li>Hint Name: status</li>
          <li>Description: Hints the status of the target resource.</li>
          <li>Content Model: string</li>
          <li>Specification: [this document]</li>
        </ul>
        <t>Content MUST be a string; possible values are:</t>
        <ul spacing="normal">
          <li>"deprecated" - indicates that use of the resource is not recommended, but it is still available.</li>
          <li>"gone" - indicates that the resource is no longer available; i.e., it will return a 410 Gone HTTP status code if accessed.</li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Clients need to exercise care when using hints. For example, a naive client might send credentials to a server that uses the auth-req hint, without checking to see if those credentials are appropriate for that server.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="hint_registry">
        <name>HTTP Link Hint Registry</name>
        <t>This specification defines the HTTP Link Hint Registry. See <xref target="link_hints"/> for a general description of the function of link hints.</t>
        <t>Link hints are generic; that is, they are potentially applicable to any HTTP resource, not specific to one application of HTTP, nor to one particular format. Generally, they ought to be information that would otherwise be discoverable by interacting with the resource.</t>
        <t>Hint names MUST be composed of the lowercase letters (a-z), digits (0-9), underscores ("_") and hyphens ("-"), and MUST begin with a lowercase letter.</t>
        <t>Hint content MUST be described in terms of JSON values (<xref target="RFC8259"/>, Section 3).</t>
        <t>Hint semantics SHOULD be described in terms of the framework defined in <xref target="RFC8288"/>.</t>
        <t>New hints are registered using the Expert Review process described in <xref target="RFC8126"/> to enforce the criteria above. Requests for registration of new resource hints are to use the following template:</t>
        <ul spacing="normal">
          <li>Hint Name: [hint name]</li>
          <li>Description: [a short description of the hint's semantics]</li>
          <li>Content Model: [valid JSON value types; see RFC627 Section 2.1]</li>
          <li>Specification: [reference to specification document]</li>
        </ul>
        <t>Initial registrations are enumerated in <xref target="hints"/>. The "rel", "rev", "hreflang", "media", "title", and "type" hint names are reserved, so as to avoid potential clashes with link serialisations.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC7234">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Caching</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7234"/>
          <seriesInfo name="DOI" value="10.17487/RFC7234"/>
        </reference>
        <reference anchor="RFC7231">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems. This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7231"/>
          <seriesInfo name="DOI" value="10.17487/RFC7231"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC5789">
          <front>
            <title>PATCH Method for HTTP</title>
            <author fullname="L. Dusseault" initials="L." surname="Dusseault"/>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>Several applications extending the Hypertext Transfer Protocol (HTTP) require a feature to do partial resource modification. The existing HTTP PUT method only allows a complete replacement of a document. This proposal adds a new HTTP method, PATCH, to modify an existing HTTP resource. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5789"/>
          <seriesInfo name="DOI" value="10.17487/RFC5789"/>
        </reference>
        <reference anchor="RFC7233">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="Y. Lafon" initials="Y." role="editor" surname="Lafon"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypertext information systems. This document defines range requests and the rules for constructing and combining responses to those requests.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7233"/>
          <seriesInfo name="DOI" value="10.17487/RFC7233"/>
        </reference>
        <reference anchor="RFC7240">
          <front>
            <title>Prefer Header for HTTP</title>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>This specification defines an HTTP header field that can be used by a client to request that certain behaviors be employed by a server while processing a request.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7240"/>
          <seriesInfo name="DOI" value="10.17487/RFC7240"/>
        </reference>
        <reference anchor="RFC7232">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP/1.1 conditional requests, including metadata header fields for indicating state changes, request header fields for making preconditions on such state, and rules for constructing the responses to a conditional request when one or more preconditions evaluate to false.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7232"/>
          <seriesInfo name="DOI" value="10.17487/RFC7232"/>
        </reference>
        <reference anchor="RFC6585">
          <front>
            <title>Additional HTTP Status Codes</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>This document specifies additional HyperText Transfer Protocol (HTTP) status codes for a variety of common situations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6585"/>
          <seriesInfo name="DOI" value="10.17487/RFC6585"/>
        </reference>
        <reference anchor="RFC7235">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Authentication</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypermedia information systems. This document defines the HTTP Authentication framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7235"/>
          <seriesInfo name="DOI" value="10.17487/RFC7235"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC6906">
          <front>
            <title>The 'profile' Link Relation Type</title>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <date month="March" year="2013"/>
            <abstract>
              <t>This specification defines the 'profile' link relation type that allows resource representations to indicate that they are following one or more profiles. A profile is defined not to alter the semantics of the resource representation itself, but to allow clients to learn about additional semantics (constraints, conventions, extensions) that are associated with the resource representation, in addition to those defined by the media type and possibly other mechanisms.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6906"/>
          <seriesInfo name="DOI" value="10.17487/RFC6906"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
    </references>
    <?line 267?>

<section anchor="link_header">
      <name>Representing Link Hints in Link Headers</name>
      <t>A link hint can be represented in a Link header (<xref target="RFC8288"/>, Section 3) as a link-extension.</t>
      <t>When doing so, the JSON of the hint's content SHOULD be normalised to reduce extraneous spaces (%x20), and MUST NOT contain horizontal tabs (%x09), line feeds (%x0A) or carriage returns (%x0D). When they are part of a string value, these characters MUST be escaped as described in <xref target="RFC8259"/> Section 7; otherwise, they MUST be discarded.</t>
      <t>Furthermore, if the content is an array or an object, the surrounding delimiters MUST be removed before serialisation. In other words, the outermost object or array is represented without the braces ("{}") or brackets ("[]") respectively, but this does not apply to inner objects or arrays.</t>
      <t>For example, the two JSON values below are those of the fictitious "example" and "example1" hints, respectively:</t>
      <artwork><![CDATA[
"The Example Value"
1.2
]]></artwork>
      <t>In a Link header, they would be serialised as:</t>
      <sourcecode type="http-message"><![CDATA[
Link: </>; rel="sample"; example="The Example Value";
      example1=1.2
]]></sourcecode>
      <t>A more complex, single value for "example":</t>
      <sourcecode type="json"><![CDATA[
[
  "foo",
  -1.23,
  true,
  ["charlie", "bennet"],
  {"cat": "thor"},
  false
]
]]></sourcecode>
      <t>would be serialised as:</t>
      <sourcecode type="http-message"><![CDATA[
Link: </>; rel="sample"; example="\"foo\", -1.23, true,
      [\"charlie\", \"bennet\"], {"cat": \"thor\"}, false"
]]></sourcecode>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Thanks to Jan Algermissen, Mike Amundsen, Bill Burke, Graham Klyne, Leif Hedstrom, Jeni Tennison, Erik Wilde and Jorge Williams for their suggestions and feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81baXMcOXL9Xr8CLoVjyN3u5qGb9HiXOkbSWNdKHE84RIYC
XYXuxrCuAVBN9TA4v90vE0BVdbM5srW21zsRYtcFJPJ4+TKBHY/HidOuUEfi
5enpe/FaVxfipa6cTeR0atTyKMnrrJIlXsiNnLmxVm42XjjXyEaPC7w+XuD1
8f5+kkuHt66enZw+v04yXMxrszoS1uVJohtzJJxprTvc33+8f5hcqNVlbfIj
8apyylTKjZ/R8Elinazyz7KoKwy2UjaxpTTu869t7ZQ9ElWdNPpIfHJ1NhL4
R1e5qtxI2No4o2YWv1Zl+OGMzvAoq8tGhh8lXsYjXUFydZ4kS1W16igRYm7q
tjkS6ZNWF7mu5uJJUWcXVsxq4zVz8v6VTfGiWzUQLP25Nhf02gv6ju6XUhe4
HzTzV1LTpDZzeiRNtgiP7NHeHr1Jt/RSTeJre3Rjb2rqS6v2whh79O1cu0U7
xdes98t5VP0eqx7/OHqrgLatG8yx8fbEDzPR9V5nsr0/sudk4coiTRLZukVt
oKAxZhHQG0zwZiLe1s5h9QtZ8m3vH2+kudh8gqXJSv8mna6rI76jvKLKqnZ/
pX8msD0/aA3sGuW/vLycxKd7SVLVpsQYS5gqGY/HQk5hXNg0SU4X2opSlbWw
jcr0TCsr0g1XTkdC4p1sAVFsySaVFQaXJKn4WU0FrdvCndjUOx93hVG2bk2G
wS6hOax75iWoK+EW0onaLZS51FaJUs8XTkyVyLXN6qUyKhfTFb6AW0NCmoGH
wAflJPHilzrPC5Ukd8j7TZ23GY2cJCz31dU/ffjh6cPDu/vX1yIrNHmsyGTV
TYDFLKWB3Vainq2JJqd16/A4Sr9VEO0m4geoQH2RZVOoEUkG7cDOuRW2bRpE
EtZAM2JVhZKIzhwvwdHnvAxxUhT1JU3S1BU0sFAyh1RQfZFD01XOL1UKX7Gq
4UJYg868jDBXVldLtcJjlkeKe/sH4mT9rQ/q11aTKgEHrqVPcgXtvZs5VSF8
XRRvqio105mWBVnvooJcjjxiqJWpwm+11SKdpo4BLLBqVax4ZNtmCx6tUPlc
CSuXSjhdKrET9QDZ2gzy4YoWbHRjd0diCvUH4WRhayFnM5U5nilb1Jr8SS4p
/KeFIoH5AZaGOBGthRJzo5ckID3oBK4rLH3NZNK/zW/MJAzNTtlgNewt9DXQ
WIqZqUtYhN16PJUWAgPHgs+yhaLWLhc6WwzcnobgORYSMWC0U0JmeEBRQmjr
ZwxrDRPzR7JpTN0YDUTq5ZuEQA0xGoycw3QVqUQs60xOW6Aiu7SPX4pJseD4
9ZNJdjs2DdxV8gK9x/P7A9lrcg3pnMwWfol9jPvoenT46NH1Nbu+UQiSUjKY
Yzm9eYLb0JpYFE3JgERQ+US8ct7AQF28rO2Cl2HUXAOYVuz3s9a1+J5XgPUz
EiEVKPELsqBfEaAAw6/4LvmfFClig5Et9ZFETyA/OybW5OSFgmthnHypkfJW
E3FKXtxW7J1TtZBLDS2QFofuDWEv5coKgg+jcwhLYkE3gzi56WMefIK3GJUp
ADBu06defpri/U+nAT1IQ9IrSBAYFYVILzXix6W9cUhgRmxZWT/IHCFs8PLK
I1GYlNyKhvZBUvrQkp0D9SuL0v1CgSb5G+/obUNCeJ9lrdYFhRkjN92w0IPh
lZN53pCtyR3HcyN1ta6aMAlbHFaYS/abW3G+F25HTeaTkVhqeKp48fwUEAER
8JmsvBzdm2x4TIxxUvLDHfZzsnRUIsIgg/8pBoRdGgd2zIyeBs8Nc4E3sb96
x8f9ALJpeFvl01XqPdqogpe3y+GpCCNt8EOLQREDcBoaJZMGTs2ejAXjMX1+
LAzrgeEYH6ovsI3jVMGuoSl3wgcoNZJQrKwc8Ja3QGsWAPgC5NbWWwFrVmoj
QD/65Yq7k3uTg92JeAnvWtKcV1c0wmefe5Ao8xpODR9lipeLBSUCLL/KijZX
Aywh+clE6gsilTTnaQIByDCPUaa+c4fYDMsGgZ9S0qpYUNaWAIMVRGHBN978
9PEUAct/xdt3/PvD87/99OrD82f0++PLk9evux/xjY8v3/30+ln/q//y6bs3
b56/feY/xl2xcevNyX8EfEjfvT999e7tyevULwxKB19vieZG7JgGHAZIk3Xg
Up0n0DdPnr4XB/eC2g8PDh5DmcEGBw/v4eJyQSmXJmMU8pcetpoG7IA9AnbO
QCAdQmREU1gYoBLkU6zJzeJCXN3x5qOL6yQ5EeuQz1AidqBiBI8sWrUrXNsU
Ic9F+X2WctIgOvpIAvTJDvA33AlB0+O5s6qYeQDlOb5jmlVXSE8FIXjppfjx
47u33TD3ST2ceYDzoG2E8B0muZAVmUDDSVYNDUXANvA/skr0e28Bn5igtLAS
JC6srgWjFzt/GA1J8qpi8UJq93hlR94PAkNCDtQIGQYrqwHtq256cv+hZJao
Qj0lJD3mFBZyAUh38vvvv4tfLEjqFch6+pllTlHtMXVPSZPdFa4XqMBwne4h
PpSxe/cP76aj8BBPOan3r+MW5w3c+pQCJcnF379DSJ2PBm8AyRs3bmrr1j6l
R01TBE6xF0T+M8maHg3eEuLquruMv/xf+vc6uaY1sko9NLNm1lVqPCslrygx
KemPGRbnrc512GHYR0pQu2Ii3gH9PG0JH+mNGNwEs1nw01ux6ZTpYZ+fOlD2
0dPjCXlAzHWYC36uPStHfT1XNIv0eDjDshYV5cpCz5Tnul0lcm/ofPcmh7s9
vwjUb1AadQFWZ1lrTKD5OmAIJLV1SeqyynLq6AqoXjjZ5+cp+euCShIjGvht
Tct/rS8UFV+jwJNvVcSAcka6HWKfY7tniDdpiZ4xoVtb38ZwUjTSoGQh4spk
2cvjo6mOga2DXjbGIhxgQnEDPmgkQk3A5nujxs+YJedbIDSiJxIVx0+S/Imf
ibdcj/t7fxLP2NUaLsHDtyQmjxfrPp44IEZrA3cI1KbnNRtQeywoHmA25v71
oDaMhHxYIE4gCpKoo5ffUGBAQmNAMHbgTNSrqeZ2F+98HNYIR+Ls01pWO0+S
bhDKtoRwVRioH2ckejq1vtDeqQ/WnJrQFHoM8b6hyXj3Vl1uxsGqUTt2t4+H
zRzliyYq/BVHBbk7ljeC7mP1BxzkR0Rod8gZPbPe7VZC6iXpl6pYbdGtx/Fv
1Kf/eIRkX1tmOj5vlSoHk6XV3arIu5MD+m/XRzvnVf+tH9IG8PJXAkQGBSZX
FalPKdTLmVIk+al5AI7VKFSv65i+IEsgdbhrmQAM0+ZuGIo8Qn3xgV+tepoU
Yy4Egbf1RLwYliUDLmuBGKUkJgEDznTBOPkXzPbg8f4Dmm1YUjG5WF8ZF9Qs
LFwrzCbCrfhmIBA/tIYyUYnSxCPLFq3lpA1qtua3qk5pzmfgK9xnmAF11Ii5
eOY7YKB0/EZo/nTpJwjXAbRRZb30Gct3eGSsciEsAj8kTi+GjTkiCE0+0Fa5
r718MTYL/Q/jkYLbrr2LfWd9g0CH4pTCk/WzEZz+3tbQhPDeQW54wJag/Lti
6HTDehF/7Dd6aMwjhMTrYo5Cq4Z5pONOxayjtSFzB80GN/pqfAfHpC6uj9W1
6nCDhe7eEtg+engO75tVoIFx+M2AFj99eDXGCyAmVdaxjbuPHz0gPOmBsDZ6
rqtYMoZIIcLL6ya1FK0viWdDek+L/87e1B5JTwHk6X+004AHj4b0PEznpfbU
JNDXsKz1rsnRgCinQ46cwq3dmAKqJ82RJE/26GHgxzfIcRqSzwZfHlBeT3V7
eruF1BJD6PnzJk8YPLk1wxEfZ/6rbMTIr2a4kNX+15JTpCWMpDSZo9aNr2TI
Vp3qYKSfUbZ6II/EMGSRWGtE0kw9b21dD3OhNonRNFCldNniFl3yo9uVeXL6
9GWAgPsPH1FN+W2q3crAvAjvSYT/X0Tsv0EfvmYxUuA3mMxIVD2bCWT92e0c
j56P4y6TIRP1zeIIPf8Vhuyn+8DTbTVQvwV09/r6H0ubNxY9tNvdDbvtrgcH
I/st0eGf3arppssKpOQ44T3aD7s1KJha8N4xZCSMDy1bMA9qBBMtizFm/yEq
HaxqoEVaVK/Fw13eWvVtrhF3TKGSShLFooZ8P0Ss1fS8qkMn2tMLs+ScBEMQ
LyRSRSMjz/66YYsbj28xxy367lohtEGnxrS3OieviTqO7WiULyOPd7vDhqxc
m59bhs3Q8Q95dwYl9rLWXB7NkO4wat5yTxM3uLdQkXXp3MH/sU059SBhWk3B
H8hQqpycp74tW0jrxmWdU9Tk6ZBsE/zRWMP1d71zWO6jCn0B0vq9w0fUA+hf
3LYvGr3pwf1H98HPQhi2bjHmWuUm3g0ffaPVNzZ1e7bmz0qsP/3BYN7L2lz0
9r3/FWALpPLvtlgYZySURDaMWyF+8R0zHYCeDDYODZGuNLG+38Or21i7H2wA
jGSE0DBv/OZBsaJZjZJFabfOOpD4N2VqmqykIjU4XOhI0UkXPVtR4ekCYthG
ZmpgsM5SzLDDTPXsdpYqIhtlr4B9qQkbiOSAbwaN0QEZaXWWDhqzYVnUu20M
cp1T6fkaEz1nJhp5qHfcDZcMN2/NCMHbQ13z9cLN6+2bnCd8e3wjvFHrHJHY
ayX3OIZ2NEJr1Y3N17Cr1u1Oqbw7KUAdRUedhY5K0GrSeV2pLYPfHDX2cbvP
j4WeqMnIb/xhXKOQPKgpeu9gX7ygfTj24SF8UHOJt0kZf6jtiHzUGu1WpNbB
Nim0FY6jxKMD6osyGZ2CyagSpK2hAAV+11tsbChXknaQ17aVLe3WZUA08m3g
no8zn8fWWjNKRA/lwT0G0+Y/PDPj3Xt8SRuImrTP5fRgVO62Dk4meL4mXZ8x
6TDOyduTG0u+s7l5BQwOu/y+A/s57vpf/+Ehhw4cbw40ER9543OwJXYdis2w
OR62CzguonvN2iqL1331yt3xtc0mHkJnxwFEbNy8w6Omdl5BBW/mUUUZDqYQ
+KydqhixCw971eRLgzKUxKAv6EUTnw/641v7apCDTtO4bp9y45jVZd0W+eCw
1eCYlT+j8ZUN+HDuIrQ2YozTgcCaqvugSWqsGtqQEIVyjlmuHP8GDM/1nAjY
zv74Ma48xUROIAKXfk59J2SxauD2dGecBtgP84APxYyzOUOUK9tAn7VdIbxX
MubxhlJAoZ3hTuSAf+/GIa1C5oDS7aA62j6s3/aJqTkP2wy8HdW3ezDsW3U5
cCfv7byb1Gf95+Avhhx6qfEywoxPXWzscf2F95QPHxCNB3SQrTN/viaj80VG
83GepZowy2ES6Ts8HCWdk1XqsgfBXi4MSdjr+5ZU/rFsCtBDx1I38s3Zp0V0
i/PNrHP2Sfodp21BF7pKnZLPb+aes09+I6u3mi95jxmdiKcdPuwZ/+TgfFua
6om+qzcBpU9er6g5Kos1FXltqArvGOmi7gOqhIa0UQXtsRq1pD/UhypA3+k3
l+j0gw8Fx0MGJH/oa/ZNQirGgZ05nwaTtmfrHaoA6SWfjOIo2HLiI56HnMrs
ggD4w7C1P9jqwhL8FZfH/ekBv19Kxwf6Lb9QGHW7BF4D0g8Q6uvbttV3/YEb
PgWrvmAV1reeuRWR1ySVrX0rnq277hQxmPu442OrvpEI7fgjg8iHsFSl6tZG
9rbzz18O94fYQRu3sWyEJ+rf6HcB3jPll/cJjegAs5ghD/tbJ3wiiA7qaDlX
Ie37R89QVYZmSsR9wLI/JxHYLrspL4zy5kISoJKiIy4hEGSz5fDI2rGIqMaH
xz1iB5Dv8A3gLU3ORGNtd0PHvQCvQr/hEzixGTb9mA2i9KNjlyQ5Qk6Xek3Y
uE0RDvCtudxEdPv7fHYn7Ku0BIq1dXGzgubkyXnTv/ekyDm4BW288dKr65SV
TzcuFOWL9NN5uru2QecJXyCfKpyyaugwBhfFFbH00EePc9vNA3lMfS/rtXQw
VbTdyvjHnCfCOoplKhhbqkr996EwDVcHaWx2D6X0hUGSnjKk84vi32miNDmY
HHbnI9aCKVjYZ+qpWm+eh0qDTnWPgRsWrsn05Ej8y96/HtMWw/ep9eIdx4V+
v2X641BQROm/78Q5EeRAnNIL9WUUD671Dftu/cOqhyqcdFbXXMeMMdhd+kE7
ZPT3U0ohAJZKQDhVsI7zR1GuUmAwFUF0KD69plu8m5ace2H+J5VwRvKdQQIv
Xicc/e/TWZSQXjgLMp5ByE7EM5bxDEJ6EVMvIaHsSdadbOb/OwTRVhnOv/+I
UDspUFGUGvVANRJv9IUSJyWijS+fUE3xpDUX8McXRi5kKf6tWFW4eq0Qwy8B
R87U5Uj8qCotTiGXttTfeW70hfhZF7nf7/6xRgVH14WWpY3dU01bkPM5Mr/P
Y3iRAI6yA2WK/wQz199JrDIAAA==

-->

</rfc>
