<?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.7.5 (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-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.4 -->
  <front>
    <title>HTTP Link Hints</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-link-hint-01"/>
    <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 39?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>HTTP <xref target="HTTP"/> 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 influence the choices made by 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="WEB-LINKING"/>, 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 send a 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 section="3.4.1" sectionFormat="of" target="WEB-LINKING"/>). However, <xref target="link_header"/> does recommend how to include link hints in the existing Link 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="WEB-LINKING"/>, or the link itself. The value's canonical form is a JSON <xref target="JSON"/> data structure specific to that hint.</t>
      <t>Typically, link hints are serialised in links as target attributes (<xref section="3.4.1" sectionFormat="of" target="WEB-LINKING"/>).</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 into the constraints of that format. 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 section="4.2" sectionFormat="of" target="HTTP-CACHING"/>) 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>
            <t>Hint Name: allow</t>
          </li>
          <li>
            <t>Description: Hints the HTTP methods that can be used to interact with the target resource; equivalent to the Allow HTTP response header.</t>
          </li>
          <li>
            <t>Content Model: array (of strings)</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </li>
        </ul>
        <t>Content MUST be an array of strings, containing HTTP methods (<xref section="9" sectionFormat="of" target="HTTP"/>).</t>
      </section>
      <section anchor="formats">
        <name>formats</name>
        <ul spacing="normal">
          <li>
            <t>Hint Name: formats</t>
          </li>
          <li>
            <t>Description: Hints the representation type(s) that the target resource can produce and consume, using the GET and PUT (if allowed) methods respectively.</t>
          </li>
          <li>
            <t>Content Model: object</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </li>
        </ul>
        <t>Content MUST be an object, whose keys are media types (<xref section="8.3.1" sectionFormat="of" target="HTTP"/>), 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="WEB-LINKING"/>) 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>
            <t>Hint Name: links</t>
          </li>
          <li>
            <t>Description: Hints at links whose context is the target resource.</t>
          </li>
          <li>
            <t>Content Model: object</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </li>
        </ul>
        <t>The "links" hint contains links (in the sense of <xref target="WEB-LINKING"/>) 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="WEB-LINKING"/>) and values are objects that MUST have an "href" member whose value is a URI-reference (<xref target="URI"/>, 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>
            <t>Hint Name: accept-post</t>
          </li>
          <li>
            <t>Description: Hints the POST request format(s) that the target resource can consume.</t>
          </li>
          <li>
            <t>Content Model: object</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </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>
            <t>Hint Name: accept-patch</t>
          </li>
          <li>
            <t>Description: Hints the PATCH <xref target="RFC5789"/> request format(s) that the target resource can consume; equivalent to the Accept-Patch HTTP response header.</t>
          </li>
          <li>
            <t>Content Model: array (of strings)</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </li>
        </ul>
        <t>Content MUST be an array of strings, containing media types (<xref section="8.3.1" sectionFormat="of" target="HTTP"/>) that identify the acceptable patch formats.</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>
            <t>Hint Name: accept-ranges</t>
          </li>
          <li>
            <t>Description: Hints the range-specifier(s) available for the target resource; equivalent to the Accept-Ranges HTTP response header <xref target="HTTP"/>.</t>
          </li>
          <li>
            <t>Content Model: array (of strings)</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </li>
        </ul>
        <t>Content MUST be an array of strings, containing HTTP ranges-specifiers (<xref section="14.1.1" sectionFormat="of" target="HTTP"/>).</t>
      </section>
      <section anchor="accept-prefer">
        <name>accept-prefer</name>
        <ul spacing="normal">
          <li>
            <t>Hint Name: accept-prefer</t>
          </li>
          <li>
            <t>Description: Hints the preference(s) <xref target="RFC7240"/> that the target resource understands (and might act upon) in requests.</t>
          </li>
          <li>
            <t>Content Model: array (of strings)</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </li>
        </ul>
        <t>Content MUST be an array of strings, contain preferences (<xref section="2" sectionFormat="of" target="RFC7240"/>). 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>
            <t>Hint Name: precondition-req</t>
          </li>
          <li>
            <t>Description: Hints that the target resource requires state-changing requests (e.g., PUT, PATCH) to include a precondition, as per <xref section="13.1" sectionFormat="of" target="HTTP"/>, to avoid conflicts due to concurrent updates.</t>
          </li>
          <li>
            <t>Content Model: array (of strings)</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </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>
            <t>Hint Name: auth-schemes</t>
          </li>
          <li>
            <t>Description: Hints that the target resource requires authentication using the HTTP Authentication framework <xref section="11" sectionFormat="of" target="HTTP"/>.</t>
          </li>
          <li>
            <t>Content Model: array (of objects)</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </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 section="11.1" sectionFormat="of" target="HTTP"/>), 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>
            <t>Hint Name: status</t>
          </li>
          <li>
            <t>Description: Hints the status of the target resource.</t>
          </li>
          <li>
            <t>Content Model: string</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </li>
        </ul>
        <t>Content MUST be a string; possible values are:</t>
        <ul spacing="normal">
          <li>
            <t>"deprecated" - indicates that use of the resource is not recommended, but it is still available.</t>
          </li>
          <li>
            <t>"gone" - indicates that the resource is no longer available; i.e., it will return a 410 (Gone) HTTP status code if accessed.</t>
          </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 section="3" sectionFormat="of" target="JSON"/>).</t>
        <t>Hint semantics SHOULD be described in terms of the framework defined in <xref target="WEB-LINKING"/>.</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>
            <t>Hint Name: [hint name]</t>
          </li>
          <li>
            <t>Description: [a short description of the hint's semantics]</t>
          </li>
          <li>
            <t>Content Model: [valid JSON value types; see RFC627 Section 2.1]</t>
          </li>
          <li>
            <t>Specification: [reference to specification document]</t>
          </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 anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</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="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="HTTP-CACHING">
          <front>
            <title>HTTP 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="2022"/>
            <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>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="WEB-LINKING">
          <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="JSON">
          <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="URI">
          <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="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="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="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="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>
      </references>
      <references anchor="sec-informative-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 273?>

<section anchor="link_header">
      <name>Representing Link Hints in Link Headers</name>
      <t>A link hint can be represented in a Link header (<xref section="3" sectionFormat="of" target="WEB-LINKING"/>) 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 section="7" sectionFormat="of" target="JSON"/>; 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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
05bmdIrs73MZXiR8owxB2eJv4mwg44wzAAA=

-->

</rfc>
