< draft-nottingham-link-hint-00.txt   draft-nottingham-link-hint-01.txt >
Network Working Group M. Nottingham Network Working Group M. Nottingham
Internet-Draft June 10, 2013 Internet-Draft March 27, 2018
Intended status: Informational Intended status: Informational
Expires: December 12, 2013 Expires: September 28, 2018
HTTP Link Hints HTTP Link Hints
draft-nottingham-link-hint-00 draft-nottingham-link-hint-01
Abstract Abstract
This memo specifies "HTTP Link Hints", a mechanism for annotating Web This memo specifies "HTTP Link Hints", a mechanism for annotating Web
links to HTTP(S) resources with information that otherwise might be links to HTTP(S) resources with information that otherwise might be
discovered by interacting with them. discovered by interacting with them.
Note to Readers Note to Readers
This draft should be discussed on the apps-discuss mailing list; see _RFC EDITOR: please remove this section before publication_
[apps-discuss].
Status of this Memo The issues list for this draft can be found at
https://github.com/mnot/I-D/labels/link-hint [1].
The most recent (often, unpublished) draft is at
https://mnot.github.io/I-D/link-hint/ [2].
Recent changes are listed at https://github.com/mnot/I-D/commits/gh-
pages/link-hint [3].
See also the draft's current status in the IETF datatracker, at
https://datatracker.ietf.org/doc/draft-nottingham-link-hint/ [4].
Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on December 12, 2013. This Internet-Draft will expire on September 28, 2018.
Copyright Notice Copyright Notice
Copyright (c) 2013 IETF Trust and the persons identified as the Copyright (c) 2018 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Notational Conventions . . . . . . . . . . . . . . . . . . 3 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3
2. HTTP Link Hints . . . . . . . . . . . . . . . . . . . . . . . 4 2. HTTP Link Hints . . . . . . . . . . . . . . . . . . . . . . . 4
3. Pre-Defined HTTP Link Hints . . . . . . . . . . . . . . . . . 4 3. Pre-Defined HTTP Link Hints . . . . . . . . . . . . . . . . . 4
3.1. allow . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1. allow . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2. formats . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2. formats . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3. links . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.3. links . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.4. accept-post . . . . . . . . . . . . . . . . . . . . . . . 6 3.4. accept-post . . . . . . . . . . . . . . . . . . . . . . . 6
3.5. accept-patch . . . . . . . . . . . . . . . . . . . . . . . 6 3.5. accept-patch . . . . . . . . . . . . . . . . . . . . . . 7
3.6. accept-ranges . . . . . . . . . . . . . . . . . . . . . . 7 3.6. accept-ranges . . . . . . . . . . . . . . . . . . . . . . 7
3.7. accept-prefer . . . . . . . . . . . . . . . . . . . . . . 7 3.7. accept-prefer . . . . . . . . . . . . . . . . . . . . . . 7
3.8. precondition-req . . . . . . . . . . . . . . . . . . . . . 7 3.8. precondition-req . . . . . . . . . . . . . . . . . . . . 8
3.9. auth-schemes . . . . . . . . . . . . . . . . . . . . . . . 7 3.9. auth-schemes . . . . . . . . . . . . . . . . . . . . . . 8
3.10. status . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.10. status . . . . . . . . . . . . . . . . . . . . . . . . . 9
4. Security Considerations . . . . . . . . . . . . . . . . . . . 8 4. Security Considerations . . . . . . . . . . . . . . . . . . . 9
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9
5.1. HTTP Link Hint Registry . . . . . . . . . . . . . . . . . 8 5.1. HTTP Link Hint Registry . . . . . . . . . . . . . . . . . 9
6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 9 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.1. Normative References . . . . . . . . . . . . . . . . . . . 9 6.1. Normative References . . . . . . . . . . . . . . . . . . 10
6.2. Informative References . . . . . . . . . . . . . . . . . . 10 6.2. Informative References . . . . . . . . . . . . . . . . . 11
Appendix A. Representing Link Hints in Link Headers . . . . . . . 11 6.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 12 Appendix A. Representing Link Hints in Link Headers . . . . . . 12
Appendix C. Open Issues . . . . . . . . . . . . . . . . . . . . . 12 Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 13
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 12 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 13
1. Introduction 1. Introduction
Clients can discover a variety of information about a HTTP HTTP [RFC7230] clients can discover a variety of information about a
[I-D.ietf-httpbis-p1-messaging] resource by interacting with it. For resource by interacting with it. For example, the methods supported
example, the methods supported can be learned through the Allow can be learned through the Allow response header field, and the need
response header field, whereas the need for authentication is for authentication is conveyed with a 401 Authentication Required
conveyed with a 401 Authentication Required status code. status code.
In some situations, it can be beneficial to know this information In some situations, it can be beneficial to know this information
before interacting with the resource; not only can it save time before interacting with the resource; not only can it save time
(through reduced round trips), but it can also affect the choices (through reduced round trips), but it can also affect the choices
given to the code or user driving the interaction. given to the code or user driving the interaction.
For example, a user interface that presents the data from an HTTP- For example, a user interface that presents the data from an HTTP-
based API might need to know which resources the user has write based API might need to know which resources the user has write
access to, so that it can present the appropriate interface. access to, so that it can present the appropriate interface.
This specification defines a vocabulary of "HTTP link hints" that This specification defines a vocabulary of "HTTP link hints" that
allow such metadata about HTTP resources to be attached to Web links allow such metadata about HTTP resources to be attached to Web links
[RFC5988], thereby making it available before the link is followed. [RFC8288], thereby making it available before the link is followed.
It also establishes a registry for future hints. It also establishes a registry for future hints.
It does not recommend a single serialisation format for link hints; It does not recommend a single way to express link hints; rather, it
rather, it is expected that this will be done by individual link is expected that this will be done by individual link serialisations
serialisations that use hints (whether they be in a representation (see [RFC8288], Section 3.4.1). However, Appendix A does recommend
body, message headers or elsewhere). However, Appendix A does how to include link hints in the existing Link HTTP header field.
recommend how to include link hints in the existing Link HTTP header
field.
Hints are just that - they are not a "contract", and are to only be Hints are just that - they are not a "contract", and are to only be
taken as advisory. The runtime behaviour of the resource always taken as advisory. The runtime behaviour of the resource always
overrides hinted information. overrides hinted information.
For example, a client might receive a hint that the PUT method is For example, a client might receive a hint that the PUT method is
allowed on all "widget" resources. This means that generally, the allowed on all "widget" resources. This means that generally, the
client can PUT to them, but a specific resource might reject a PUT client can PUT to them, but a specific resource might reject a PUT
based upon access control or other considerations. based upon access control or other considerations.
More fine-grained information might be gathered by interacting with More fine-grained information might also be gathered by interacting
the resource (e.g., via a GET), or by another resource "containing" with the resource (e.g., via a GET), or by another resource
it (such as a "widgets" collection) or describing it (e.g., one "containing" it (such as a "widgets" collection) or describing it
linked to it with a "describedby" link relation). (e.g., one linked to it with a "describedby" link relation).
1.1. Notational Conventions 1.1. Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
document are to be interpreted as described in [RFC2119]. "OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
2. HTTP Link Hints 2. HTTP Link Hints
A HTTP link hint is a (key, value) tuple that describes the target A HTTP link hint is a (key, value) tuple that describes the target
resource of a Web link [RFC5988], or the link itself. The value's resource of a Web link [RFC8288], or the link itself. The value's
canonical form is a JSON [RFC4627] data structure, whose form is canonical form is a JSON [RFC8259] data structure specific to that
defined by the hint's definition. hint.
Typically, they are serialised in links as target attributes. Typically, link hints are serialised in links as target attributes
([RFC8288], Section 3.4.1).
In JSON-based formats, this can be achieved by simply serialising In JSON-based formats, this can be achieved by simply serialising
link hints as an object; for example: link hints as an object; for example:
{ {
"_links": { "_links": {
"self": { "self": {
"href": "/orders/523", "href": "/orders/523",
"hints": { "hints": {
"allow": ["GET", "POST"], "allow": ["GET", "POST"],
"accept-post": { "accept-post": {
"application/example+json": "application/example+json":
{} {}
} }
} }
} }
} }
} }
In other link formats, this requires a mapping from the canonical In other link formats, this requires a mapping from the canonical
JSON data model. One such mapping for the Link HTTP header is JSON data model. One such mapping is described in Appendix A for the
described in Appendix A. Link HTTP header field.
The information in a link hint SHOULD NOT be considered valid for The information in a link hint SHOULD NOT be considered valid for
longer than the freshness lifetime ([I-D.ietf-httpbis-p6-cache]) of longer than the freshness lifetime ([RFC7234], Section 4.2) of the
the representation that the link occurred within, and in some cases, representation that the link occurred within, and in some cases, it
it might be valid for a considerably shorter period. might be valid for a considerably shorter period.
Likewise, the information in a link hint is specific to the link it 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 is attached to. This means that if a representation is specific to a
particular user, the hints on links in that representation are also particular user, the hints on links in that representation are also
specific to that user. specific to that user.
3. Pre-Defined HTTP Link Hints 3. Pre-Defined HTTP Link Hints
3.1. allow 3.1. allow
o Hint Name: allow o Hint Name: allow
o Description: Hints the HTTP methods that can be used to interact o Description: Hints the HTTP methods that can be used to interact
with the target resource; equivalent to the Allow HTTP response with the target resource; equivalent to the Allow HTTP response
header. header.
o Content Model: array (of strings) o Content Model: array (of strings)
o Specification: [this document] o Specification: [this document]
Content MUST be an array of strings, containing HTTP methods. Content MUST be an array of strings, containing HTTP methods.
3.2. formats 3.2. formats
o Hint Name: formats o Hint Name: formats
o Description: Hints the representation type(s) that the target o Description: Hints the representation type(s) that the target
resource can produce and consume, using the GET and PUT (if resource can produce and consume, using the GET and PUT (if
allowed) methods respectively. allowed) methods respectively.
o Content Model: object o Content Model: object
o Specification: [this document] o Specification: [this document]
Content MUST be an object, whose keys are media types, and values are Content MUST be an object, whose keys are media types, and values are
objects. objects.
The object MAY have a "links" member, whose value is an object The object MAY have a "links" member, whose value is an object
representing links (in the sense of [RFC5988]) whose context is any representing links (in the sense of [RFC8288]) whose context is any
document that uses that format. Generally, this will be schema or document that uses that format. Generally, this will be schema or
profile ([RFC6906]) information. The "links" member has the same profile ([RFC6906]) information. The "links" member has the same
format as the "links" hint. format as the "links" hint.
Furthermore, the object MAY have a "deprecated" member, whose value Furthermore, the object MAY have a "deprecated" member, whose value
is either true or false, indicating whether support for the format is either true or false, indicating whether support for the format
might be removed in the near future. might be removed in the near future.
All other members of the object are under control of the All other members of the object are under control of the
corresponding media type's definition. corresponding media type's definition.
skipping to change at page 5, line 41 skipping to change at page 5, line 49
Furthermore, the object MAY have a "deprecated" member, whose value Furthermore, the object MAY have a "deprecated" member, whose value
is either true or false, indicating whether support for the format is either true or false, indicating whether support for the format
might be removed in the near future. might be removed in the near future.
All other members of the object are under control of the All other members of the object are under control of the
corresponding media type's definition. corresponding media type's definition.
3.3. links 3.3. links
o Hint Name: links o Hint Name: links
o Description: Hints at links whose context is the target resource. o Description: Hints at links whose context is the target resource.
o Content Model: object o Content Model: object
o Specification: [this document] o Specification: [this document]
The "links" hint contains links (in the sense of [RFC5988]) whose The "links" hint contains links (in the sense of [RFC8288]) whose
context is the hinted target resource, which are stable for the context is the hinted target resource, which are stable for the
lifetime of the hint. lifetime of the hint.
Content MUST be an object, whose member names are link relations Content MUST be an object, whose member names are link relations
([RFC5988]) and values are objects that MUST have an "href" member ([RFC8288]) and values are objects that MUST have an "href" member
whose value is a URI-reference ([RFC3986], using the original link as whose value is a URI-reference ([RFC3986], using the original link as
the base for resolution) for the link hint's target resource, and MAY the base for resolution) for the link hint's target resource, and MAY
itself contain link hints, serialised as the value for a "hints" itself contain link hints, serialised as the value for a "hints"
member. member.
For example: For example:
"links": { "links": {
"edit-form": { "edit-form": {
"href": "./edit", "href": "./edit",
skipping to change at page 7, line 8 skipping to change at page 7, line 27
Content MUST be an array of strings, containing media types. Note Content MUST be an array of strings, containing media types. Note
that there is no opportunity to communicate format-specific hints for that there is no opportunity to communicate format-specific hints for
PATCH formats. PATCH formats.
When this hint is present, "PATCH" SHOULD be listed in the "allow" When this hint is present, "PATCH" SHOULD be listed in the "allow"
hint. hint.
3.6. accept-ranges 3.6. accept-ranges
o Hint Name: accept-ranges o Hint Name: accept-ranges
o Description: Hints the range-specifier(s) available for the target o Description: Hints the range-specifier(s) available for the target
resource; equivalent to the Accept-Ranges HTTP response header resource; equivalent to the Accept-Ranges HTTP response header
[I-D.ietf-httpbis-p5-range]. [RFC7233].
o Content Model: array (of strings) o Content Model: array (of strings)
o Specification: [this document] o Specification: [this document]
Content MUST be an array of strings, containing HTTP range- Content MUST be an array of strings, containing HTTP range-
specifiers. specifiers.
3.7. accept-prefer 3.7. accept-prefer
o Hint Name: accept-prefer o Hint Name: accept-prefer
o Description: Hints the preference(s) [I-D.snell-http-prefer] that
the target resource understands (and might act upon) in requests. o Description: Hints the preference(s) [RFC7240] that the target
resource understands (and might act upon) in requests.
o Content Model: array (of strings) o Content Model: array (of strings)
o Specification: [this document] o Specification: [this document]
Content MUST be an array of strings, contain preferences. Note that, Content MUST be an array of strings, contain preferences. Note that,
by its nature, a preference can be ignored by the server. by its nature, a preference can be ignored by the server.
3.8. precondition-req 3.8. precondition-req
o Hint Name: precondition-req o Hint Name: precondition-req
o Description: Hints that the target resource requires state- o Description: Hints that the target resource requires state-
changing requests (e.g., PUT, PATCH) to include a precondition, as changing requests (e.g., PUT, PATCH) to include a precondition, as
per [I-D.ietf-httpbis-p4-conditional], to avoid conflicts due to per [RFC7232], to avoid conflicts due to concurrent updates.
concurrent updates.
o Content Model: array (of strings) o Content Model: array (of strings)
o Specification: [this document] o Specification: [this document]
Content MUST be an array of strings, with possible values "etag" and Content MUST be an array of strings, with possible values "etag" and
"last-modified" indicating type of precondition expected. "last-modified" indicating type of precondition expected.
See also the 428 Precondition Required status code ([RFC6585]). See also the 428 Precondition Required status code ([RFC6585]).
3.9. auth-schemes 3.9. auth-schemes
o Hint Name: auth-schemes o Hint Name: auth-schemes
skipping to change at page 7, line 46 skipping to change at page 8, line 25
o Specification: [this document] o Specification: [this document]
Content MUST be an array of strings, with possible values "etag" and Content MUST be an array of strings, with possible values "etag" and
"last-modified" indicating type of precondition expected. "last-modified" indicating type of precondition expected.
See also the 428 Precondition Required status code ([RFC6585]). See also the 428 Precondition Required status code ([RFC6585]).
3.9. auth-schemes 3.9. auth-schemes
o Hint Name: auth-schemes o Hint Name: auth-schemes
o Description: Hints that the target resource requires o Description: Hints that the target resource requires
authentication using the HTTP Authentication Framework authentication using the HTTP Authentication Framework [RFC7235].
[I-D.ietf-httpbis-p7-auth].
o Content Model: array (of objects) o Content Model: array (of objects)
o Specification: [this document] o Specification: [this document]
Content MUST be an array of objects, each with a "scheme" member Content MUST be an array of objects, each with a "scheme" member
containing a string that corresponds to a HTTP authentication scheme, containing a string that corresponds to a HTTP authentication scheme,
and optionally a "realms" member containing an array of zero to many and optionally a "realms" member containing an array of zero to many
strings that identify protection spaces that the resource is a member strings that identify protection spaces that the resource is a member
of. of.
For example: For example:
skipping to change at page 9, line 11 skipping to change at page 9, line 46
Link hints are generic; that is, they are potentially applicable to Link hints are generic; that is, they are potentially applicable to
any HTTP resource, not specific to one application of HTTP, nor to any HTTP resource, not specific to one application of HTTP, nor to
one particular format. Generally, they ought to be information that one particular format. Generally, they ought to be information that
would otherwise be discoverable by interacting with the resource. would otherwise be discoverable by interacting with the resource.
Hint names MUST be composed of the lowercase letters (a-z), digits Hint names MUST be composed of the lowercase letters (a-z), digits
(0-9), underscores ("_") and hyphens ("-"), and MUST begin with a (0-9), underscores ("_") and hyphens ("-"), and MUST begin with a
lowercase letter. lowercase letter.
Hint content MUST be described in terms of JSON values ([RFC4627], Hint content MUST be described in terms of JSON values ([RFC8259],
Section 2.1). Section 3).
Hint semantics SHOULD be described in terms of the framework defined Hint semantics SHOULD be described in terms of the framework defined
in [RFC5988]. in [RFC8288].
New hints are registered using the Expert Review process described in New hints are registered using the Expert Review process described in
[RFC5226] to enforce the criteria above. Requests for registration [RFC8126] to enforce the criteria above. Requests for registration
of new resource hints are to use the following template: of new resource hints are to use the following template:
o Hint Name: [hint name] o Hint Name: [hint name]
o Description: [a short description of the hint's semantics] o Description: [a short description of the hint's semantics]
o Content Model: [valid JSON value types; see RFC627 Section 2.1] o Content Model: [valid JSON value types; see RFC627 Section 2.1]
o Specification: [reference to specification document] o Specification: [reference to specification document]
Initial registrations are enumerated in Section 3. The "rel", "rev", Initial registrations are enumerated in Section 3. The "rel", "rev",
"hreflang", "media", "title", and "type" hint names are reserved, so "hreflang", "media", "title", and "type" hint names are reserved, so
as to avoid potential clashes with link serialisations. as to avoid potential clashes with link serialisations.
6. References 6. References
6.1. Normative References 6.1. Normative References
[I-D.ietf-httpbis-p1-messaging]
Fielding, R. and J. Reschke, "Hypertext Transfer Protocol
(HTTP/1.1): Message Syntax and Routing",
draft-ietf-httpbis-p1-messaging-22 (work in progress),
February 2013.
[I-D.ietf-httpbis-p6-cache]
Fielding, R., Nottingham, M., and J. Reschke, "Hypertext
Transfer Protocol (HTTP/1.1): Caching",
draft-ietf-httpbis-p6-cache-22 (work in progress),
February 2013.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66, Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, January 2005. RFC 3986, DOI 10.17487/RFC3986, January 2005,
<https://www.rfc-editor.org/info/rfc3986>.
[RFC4627] Crockford, D., "The application/json Media Type for [RFC5789] Dusseault, L. and J. Snell, "PATCH Method for HTTP",
JavaScript Object Notation (JSON)", RFC 4627, July 2006. RFC 5789, DOI 10.17487/RFC5789, March 2010,
<https://www.rfc-editor.org/info/rfc5789>.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an [RFC6585] Nottingham, M. and R. Fielding, "Additional HTTP Status
IANA Considerations Section in RFCs", BCP 26, RFC 5226, Codes", RFC 6585, DOI 10.17487/RFC6585, April 2012,
May 2008. <https://www.rfc-editor.org/info/rfc6585>.
[RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Protocol (HTTP/1.1): Message Syntax and Routing",
RFC 7230, DOI 10.17487/RFC7230, June 2014,
<https://www.rfc-editor.org/info/rfc7230>.
6.2. Informative References [RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Protocol (HTTP/1.1): Conditional Requests", RFC 7232,
DOI 10.17487/RFC7232, June 2014,
<https://www.rfc-editor.org/info/rfc7232>.
[I-D.ietf-httpbis-p4-conditional] [RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed.,
Fielding, R. and J. Reschke, "Hypertext Transfer Protocol "Hypertext Transfer Protocol (HTTP/1.1): Range Requests",
(HTTP/1.1): Conditional Requests", RFC 7233, DOI 10.17487/RFC7233, June 2014,
draft-ietf-httpbis-p4-conditional-22 (work in progress), <https://www.rfc-editor.org/info/rfc7233>.
February 2013.
[I-D.ietf-httpbis-p5-range] [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
Fielding, R., Lafon, Y., and J. Reschke, "Hypertext Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching",
Transfer Protocol (HTTP/1.1): Range Requests", RFC 7234, DOI 10.17487/RFC7234, June 2014,
draft-ietf-httpbis-p5-range-22 (work in progress), <https://www.rfc-editor.org/info/rfc7234>.
February 2013.
[I-D.ietf-httpbis-p7-auth] [RFC7235] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Fielding, R. and J. Reschke, "Hypertext Transfer Protocol Protocol (HTTP/1.1): Authentication", RFC 7235,
(HTTP/1.1): Authentication", draft-ietf-httpbis-p7-auth-22 DOI 10.17487/RFC7235, June 2014,
(work in progress), February 2013. <https://www.rfc-editor.org/info/rfc7235>.
[I-D.snell-http-prefer] [RFC7240] Snell, J., "Prefer Header for HTTP", RFC 7240,
Snell, J., "Prefer Header for HTTP", DOI 10.17487/RFC7240, June 2014,
draft-snell-http-prefer-18 (work in progress), <https://www.rfc-editor.org/info/rfc7240>.
January 2013.
[RFC5789] Dusseault, L. and J. Snell, "PATCH Method for HTTP", [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
RFC 5789, March 2010. 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC6585] Nottingham, M. and R. Fielding, "Additional HTTP Status [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
Codes", RFC 6585, April 2012. Interchange Format", STD 90, RFC 8259,
DOI 10.17487/RFC8259, December 2017,
<https://www.rfc-editor.org/info/rfc8259>.
[RFC8288] Nottingham, M., "Web Linking", RFC 8288,
DOI 10.17487/RFC8288, October 2017,
<https://www.rfc-editor.org/info/rfc8288>.
6.2. Informative References
[RFC6906] Wilde, E., "The 'profile' Link Relation Type", RFC 6906, [RFC6906] Wilde, E., "The 'profile' Link Relation Type", RFC 6906,
March 2013. DOI 10.17487/RFC6906, March 2013,
<https://www.rfc-editor.org/info/rfc6906>.
[apps-discuss] [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
IETF, "IETF Apps-Discuss Mailing List", n.d., Writing an IANA Considerations Section in RFCs", BCP 26,
<https://www.ietf.org/mailman/listinfo/apps-discuss>. RFC 8126, DOI 10.17487/RFC8126, June 2017,
<https://www.rfc-editor.org/info/rfc8126>.
6.3. URIs
[1] https://github.com/mnot/I-D/labels/link-hint
[2] https://mnot.github.io/I-D/link-hint/
[3] https://github.com/mnot/I-D/commits/gh-pages/link-hint
[4] https://datatracker.ietf.org/doc/draft-nottingham-link-hint/
Appendix A. Representing Link Hints in Link Headers Appendix A. Representing Link Hints in Link Headers
A link hint can be represented in a Link header ([RFC5988], Section A link hint can be represented in a Link header ([RFC8288],
5) as a link-extension. Section 3) as a link-extension.
When doing so, the JSON of the hint's content SHOULD be normalised to When doing so, the JSON of the hint's content SHOULD be normalised to
reduce extraneous spaces (%x20), and MUST NOT contain horizontal tabs reduce extraneous spaces (%x20), and MUST NOT contain horizontal tabs
(%x09), line feeds (%x0A) or carriage returns (%x0D). When they are (%x09), line feeds (%x0A) or carriage returns (%x0D). When they are
part of a string value, these characters MUST be escaped as described part of a string value, these characters MUST be escaped as described
in [RFC4627] Section 2.5; otherwise, they MUST be discarded. in [RFC8259] Section 7; otherwise, they MUST be discarded.
Furthermore, if the content is an array or an object, the surrounding Furthermore, if the content is an array or an object, the surrounding
delimiters MUST be removed before serialisation. In other words, the delimiters MUST be removed before serialisation. In other words, the
outermost object or array is represented without the braces ("{}") or outermost object or array is represented without the braces ("{}") or
brackets ("[]") respectively, but this does not apply to inner brackets ("[]") respectively, but this does not apply to inner
objects or arrays. objects or arrays.
For example, the two JSON values below are those of the fictitious For example, the two JSON values below are those of the fictitious
"example" and "exmaple1" hints, respectively: "example" and "example1" hints, respectively:
"The Example Value" "The Example Value"
1.2 1.2
In a Link header, they would be serialised as: In a Link header, they would be serialised as:
Link: </>; rel="sample"; example="The Example Value"; Link: </>; rel="sample"; example="The Example Value";
example1=1.2 example1=1.2
A more complex, single value for "example": A more complex, single value for "example":
skipping to change at page 12, line 11 skipping to change at page 13, line 11
Link: </>; rel="sample"; example="\"foo\", -1.23, true, Link: </>; rel="sample"; example="\"foo\", -1.23, true,
[\"charlie\", \"bennet\"], {"cat": \"thor\"}, false" [\"charlie\", \"bennet\"], {"cat": \"thor\"}, false"
Appendix B. Acknowledgements Appendix B. Acknowledgements
Thanks to Jan Algermissen, Mike Amundsen, Bill Burke, Graham Klyne, Thanks to Jan Algermissen, Mike Amundsen, Bill Burke, Graham Klyne,
Leif Hedstrom, Jeni Tennison, Erik Wilde and Jorge Williams for their Leif Hedstrom, Jeni Tennison, Erik Wilde and Jorge Williams for their
suggestions and feedback. suggestions and feedback.
Appendix C. Open Issues
The following is a list of placeholders for open issues.
o Resource Hints
* indicate a POST to 201 Created pattern
* indicate an "action" POST
* outbound links
* forms?
o Representation Hints
* format profiles
* schema?
* deprecation
Author's Address Author's Address
Mark Nottingham Mark Nottingham
Email: mnot@mnot.net Email: mnot@mnot.net
URI: http://www.mnot.net/ URI: http://www.mnot.net/
 End of changes. 69 change blocks. 
141 lines changed or deleted 177 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/