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