<?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-nottingham-link-hint-03" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title>HTTP Link Hints</title>
    <seriesInfo name="Internet-Draft" value="draft-nottingham-link-hint-03"/>
    <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 31?>

<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>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-nottingham-link-hint/"/>.
      </t>
      <t>
         information can be found at <eref target="https://mnot.github.io/I-D/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mnot/I-D/labels/link-hint"/>.</t>
    </note>
  </front>
  <middle>
    <?line 36?>

<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 265?>

<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:
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

-->

</rfc>
