<?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.23 (Ruby 3.3.6) -->
<?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-02" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title>HTTP Link Hints</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-link-hint-02"/>
    <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: 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"/>).</t>
      </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: array (of strings)</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </li>
        </ul>
        <t>Content MUST be an array of strings, 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 strings)</t>
          </li>
          <li>
            <t>Specification: [this document]</t>
          </li>
        </ul>
        <t>Content MUST be an array of strings, each corresponding 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-schemes": [
      "Basic", "Digest"
    ]
  }
]]></sourcecode>
      </section>
      <section anchor="auth-realms">
        <name>auth-realms</name>
        <ul spacing="normal">
          <li>
            <t>Hint Name: auth-realms</t>
          </li>
          <li>
            <t>Description: Hints the authentication realm(s) available for those schemes that support them in the HTTP Authentication framework <xref section="11" sectionFormat="of" 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, each indicating a protection space that the resource is a member of.</t>
        <t>For example:</t>
        <sourcecode type="json"><![CDATA[
  {
    "auth-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 anchor="sec-combined-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="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 255?>

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

-->

</rfc>
