rfc9290.original | rfc9290.txt | |||
---|---|---|---|---|
CoRE Working Group T. Fossati | Internet Engineering Task Force (IETF) T. Fossati | |||
Internet-Draft arm | Request for Comments: 9290 Arm Limited | |||
Intended status: Standards Track C. Bormann | Category: Standards Track C. Bormann | |||
Expires: 7 January 2023 Universität Bremen TZI | ISSN: 2070-1721 Universität Bremen TZI | |||
6 July 2022 | October 2022 | |||
Concise Problem Details For CoAP APIs | Concise Problem Details for Constrained Application Protocol (CoAP) APIs | |||
draft-ietf-core-problem-details-08 | ||||
Abstract | Abstract | |||
This document defines a concise "problem detail" as a way to carry | This document defines a concise "problem detail" as a way to carry | |||
machine-readable details of errors in a REST response to avoid the | machine-readable details of errors in a Representational State | |||
need to define new error response formats for REST APIs for | Transfer (REST) response to avoid the need to define new error | |||
constrained environments. The format is inspired by, but intended to | response formats for REST APIs for constrained environments. The | |||
be more concise than, the Problem Details for HTTP APIs defined in | format is inspired by, but intended to be more concise than, the | |||
RFC 7807. | problem details for HTTP APIs defined in RFC 7807. | |||
About This Document | ||||
This note is to be removed before publishing as an RFC. | ||||
Status information for this document may be found at | ||||
https://datatracker.ietf.org/doc/draft-ietf-core-problem-details/. | ||||
Discussion of this document takes place on the Constrained RESTful | ||||
Environments Working Group mailing list (mailto:core@ietf.org), which | ||||
is archived at https://mailarchive.ietf.org/arch/browse/core/. | ||||
Source for this draft and an issue tracker can be found at | ||||
https://github.com/core-wg/core-problem-details. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | This document is a product of the Internet Engineering Task Force | |||
Task Force (IETF). Note that other groups may also distribute | (IETF). It represents the consensus of the IETF community. It has | |||
working documents as Internet-Drafts. The list of current Internet- | received public review and has been approved for publication by the | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc9290. | |||
material or to cite them other than as "work in progress." | ||||
This Internet-Draft will expire on 7 January 2023. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Terminology and Requirements Language . . . . . . . . . . 3 | 1.1. Terminology and Requirements Language | |||
2. Basic Problem Details . . . . . . . . . . . . . . . . . . . . 4 | 2. Basic Problem Details | |||
3. Extending Concise Problem Details . . . . . . . . . . . . . . 6 | 3. Extending Concise Problem Details | |||
3.1. Standard Problem Detail Entries . . . . . . . . . . . . . 7 | 3.1. Standard Problem Detail Entries | |||
3.1.1. Standard Problem Detail Entry: Unprocessed CoAP | 3.1.1. Standard Problem Detail Entry: Unprocessed CoAP Option | |||
Option . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.2. Custom Problem Detail Entries | |||
3.2. Custom Problem Detail Entries . . . . . . . . . . . . . . 9 | 4. Privacy Considerations | |||
4. Privacy Considerations . . . . . . . . . . . . . . . . . . . 12 | 5. Security Considerations | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 6. IANA Considerations | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | 6.1. Standard Problem Detail Keys Registry | |||
6.1. Standard Problem Detail Key registry . . . . . . . . . . 12 | 6.2. Custom Problem Detail Keys Registry | |||
6.2. Custom Problem Detail Key registry . . . . . . . . . . . 14 | 6.3. Media Type | |||
6.3. Media Type . . . . . . . . . . . . . . . . . . . . . . . 16 | 6.4. Content-Format | |||
6.4. Content-Format . . . . . . . . . . . . . . . . . . . . . 16 | 6.5. CBOR Tag 38 | |||
6.5. CBOR Tag 38 . . . . . . . . . . . . . . . . . . . . . . . 17 | 7. References | |||
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 7.1. Normative References | |||
7.1. Normative References . . . . . . . . . . . . . . . . . . 17 | 7.2. Informative References | |||
7.2. Informative References . . . . . . . . . . . . . . . . . 18 | Appendix A. Language-Tagged Strings | |||
Appendix A. Language-Tagged Strings . . . . . . . . . . . . . . 19 | A.1. Introduction | |||
A.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 20 | A.2. Detailed Semantics | |||
A.2. Detailed Semantics . . . . . . . . . . . . . . . . . . . 20 | A.3. Examples | |||
A.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . 21 | Appendix B. Interworking with RFC 7807 | |||
Appendix B. Interworking with RFC 7807 . . . . . . . . . . . . . 22 | Acknowledgments | |||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 23 | Contributors | |||
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | ||||
1. Introduction | 1. Introduction | |||
REST response status information such as CoAP response codes | REST response status information such as Constrained Application | |||
(Section 5.9 of [RFC7252]) is sometimes not sufficient to convey | Protocol (CoAP) response codes (Section 5.9 of [RFC7252]) is | |||
enough information about an error to be helpful. This specification | sometimes not sufficient to convey enough information about an error | |||
defines a simple and extensible framework to define CBOR [STD94] data | to be helpful. This specification defines a simple and extensible | |||
items to suit this purpose. It is designed to be reused by REST | framework to define Concise Binary Object Representation (CBOR) | |||
APIs, which can identify distinct "shapes" of these data items | [STD94] data items to suit this purpose. This framework is designed | |||
specific to their needs. Thus, API clients can be informed of both | to be reused by REST APIs, which can identify distinct "shapes" of | |||
the high-level error class (using the response code) and the finer- | these data items specific to their needs. Thus, API clients can be | |||
grained details of the problem (using the vocabulary defined here). | informed of both the high-level error class (using the response code) | |||
This pattern of communication is illustrated in Figure 1. | and the finer-grained details of the problem (using the vocabulary | |||
defined here). This pattern of communication is illustrated in | ||||
Figure 1. | ||||
.--------. .--------. | .--------. .--------. | |||
| CoAP | | CoAP | | | CoAP | | CoAP | | |||
| Client | | Server | | | Client | | Server | | |||
'----+---' '---+----' | '----+---' '---+----' | |||
| | | | | | |||
| Request | | | Request | | |||
o----------------->| | o----------------->| | |||
| | (failure) | | | (failure) | |||
|<-----------------o | |<-----------------o | |||
| Error Response | | | Error Response | | |||
| with a CBOR | | | with a CBOR | | |||
| data item giving | | | data item giving | | |||
| Problem Details | | | Problem Details | | |||
| | | | | | |||
Figure 1: Problem Details: Example with CoAP | Figure 1: Problem Details: Example with CoAP | |||
The framework presented is largely inspired by the Problem Details | The framework presented is largely inspired by the problem details | |||
for HTTP APIs defined in [RFC7807]. Appendix B discusses | for HTTP APIs defined in [RFC7807]. Appendix B discusses | |||
applications where interworking with [RFC7807] is required. | applications where interworking with [RFC7807] is required. | |||
1.1. Terminology and Requirements Language | 1.1. Terminology and Requirements Language | |||
The terminology from [RFC7252], [STD94], and [RFC8610] applies; in | The terminology from [RFC7252], [STD94], and [RFC8610] applies; in | |||
particular CBOR diagnostic notation is defined in Section 8 of | particular, CBOR diagnostic notation is defined in Section 8 of RFC | |||
[STD94] and Appendix G of [RFC8610]. Readers are also expected to be | 8949 [STD94] and Appendix G of [RFC8610]. Readers are also expected | |||
familiar with the terminology from [RFC7807]. | to be familiar with the terminology from [RFC7807]. | |||
In this document, the structure of data is specified in CDDL | In this document, the structure of data is specified in Concise Data | |||
[RFC8610] [RFC9165]. | Definition Language (CDDL) [RFC8610] [RFC9165]. | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Basic Problem Details | 2. Basic Problem Details | |||
A Concise Problem Details data item is a CBOR data item with the | A Concise Problem Details data item is a CBOR data item with the | |||
skipping to change at page 5, line 15 ¶ | skipping to change at line 178 ¶ | |||
Note that, unlike [RFC7807], Concise Problem Details data items have | Note that, unlike [RFC7807], Concise Problem Details data items have | |||
no explicit "problem type". Instead, the category (or, one could | no explicit "problem type". Instead, the category (or, one could | |||
say, Gestalt) of the problem can be understood from the shape of the | say, Gestalt) of the problem can be understood from the shape of the | |||
problem details offered. We talk of a "problem shape" for short. | problem details offered. We talk of a "problem shape" for short. | |||
The title (key -1): | The title (key -1): | |||
A short, human-readable summary of the problem shape. Beyond the | A short, human-readable summary of the problem shape. Beyond the | |||
shape of the problem, it is not intended to summarize all the | shape of the problem, it is not intended to summarize all the | |||
specific information given with the problem details. For | specific information given with the problem details. For | |||
instance, the summary might include that an account does not have | instance, the summary might include that an account does not have | |||
enough money for a transaction to succeed, but not the detail | enough money for a transaction to succeed but not the detailed | |||
information such as the account number, how much money that | information such as the account number, how much money that | |||
account has, and how much would be needed. | account has, and how much would be needed. | |||
The detail (key -2): | The detail (key -2): | |||
A human-readable explanation specific to this occurrence of the | A human-readable explanation specific to this occurrence of the | |||
problem. | problem. | |||
The instance (key -3): | The instance (key -3): | |||
A URI reference that identifies the specific occurrence of the | A URI reference that identifies the specific occurrence of the | |||
problem. It may or may not yield further information if | problem. It may or may not yield further information if | |||
dereferenced. | dereferenced. | |||
The response-code (key -4): | The response-code (key -4): | |||
The CoAP response code (Sections 5.9 and 12.1.2 of [RFC7252]) | The CoAP response code (Sections 5.9 and 12.1.2 of [RFC7252]) | |||
generated by the origin server for this occurrence of the problem. | generated by the origin server for this occurrence of the problem. | |||
The base-uri (key -5): | The base-uri (key -5): | |||
The base URI (Section 5.1 of [STD66]) that should be used to | The base URI (see Section 5.1 of RFC 3986 [STD66]) that should be | |||
resolve relative URI references embedded in this Concise Problem | used to resolve relative URI references embedded in this Concise | |||
Details data item. | Problem Details data item. | |||
The base-lang (key -6): | The base-lang (key -6): | |||
The language-tag (tag38-ltag) that applies to the presentation of | The language-tag (tag38-ltag) that applies to the presentation of | |||
unadorned text strings (not using tag 38) in this Concise Problem | unadorned text strings (not using tag 38) in this Concise Problem | |||
Details data item, see Appendix A. | Details data item; see Appendix A. | |||
The base-rtl (key -7): | The base-rtl (key -7): | |||
The writing-direction (tag38-direction) that applies to the | The writing-direction (tag38-direction) that applies to the | |||
presentation of unadorned text strings (not using tag 38) in this | presentation of unadorned text strings (not using tag 38) in this | |||
Concise Problem Details data item, see Appendix A. | Concise Problem Details data item; see Appendix A. | |||
Both "title" and "detail" can use either an unadorned CBOR text | Both "title" and "detail" can use either an unadorned CBOR text | |||
string (text) or a language-tagged text string (tag38); see | string (text) or a language-tagged text string (tag38); see | |||
Appendix A for the definition of the latter. Language tag and | Appendix A for the definition of the latter. Language tag and | |||
writing direction information for unadorned text strings are intended | writing direction information for unadorned text strings is intended | |||
to be obtained from context; if that context needs to be saved or | to be obtained from context; if that context needs to be saved or | |||
forwarded with a Concise Problem Details data item, "base-lang" and | forwarded with a Concise Problem Details data item, "base-lang" and | |||
"base-rtl" can be used for that. If no such (explicitly saved or | "base-rtl" can be used. If no such (explicitly saved or implicit) | |||
implicit) context information is available, unadorned text is | context information is available, unadorned text is interpreted with | |||
interpreted with language-tag "en" and writing-direction "false" | language-tag "en" and writing-direction "false" (ltr). | |||
(ltr). | ||||
The "title" string is advisory and included to give consumers a | The "title" string is advisory and included to give consumers a | |||
shorthand for the category (problem shape) of the error encountered. | shorthand for the category (problem shape) of the error encountered. | |||
The "detail" member, if present, ought to focus on helping the client | The "detail" member, if present, ought to focus on helping the client | |||
correct the problem, rather than giving extensive server-side | correct the problem rather than giving extensive server-side | |||
debugging information. Consumers SHOULD NOT parse the "detail" | debugging information. Consumers SHOULD NOT parse the "detail" | |||
member for information; extensions (see Section 3) are more suitable | member for information; extensions (see Section 3) are more suitable | |||
and less error-prone ways to obtain such information. Note that the | and less error-prone ways to obtain such information. Note that the | |||
"instance" URI reference may be relative; this means that it must be | "instance" URI reference may be relative; this means that it must be | |||
resolved relative to the representation's base URI, as per Section 5 | resolved relative to the representation's base URI, as per Section 5 | |||
of [STD66]. | of RFC 3986 [STD66]. | |||
The "response-code" member, if present, is only advisory; it conveys | The "response-code" member, if present, is only advisory; it conveys | |||
the CoAP response code used for the convenience of the consumer. | the CoAP response code used for the convenience of the consumer. | |||
Generators MUST use the same response code here as in the actual CoAP | Generators MUST use the same response code here as in the actual CoAP | |||
response; the latter is needed to assure that generic CoAP software | response; the latter is needed to assure that generic CoAP software | |||
that does not understand the problem-details format still behaves | that does not understand the problem-details format still behaves | |||
correctly. Consumers can use the response-code member to determine | correctly. Consumers can use the "response-code" member to determine | |||
what the original response code used by the generator was, in cases | what the original response code used by the generator was, in cases | |||
where it has been changed (e.g., by an intermediary or cache), and | where it has been changed (e.g., by an intermediary or cache), and | |||
when message bodies persist without CoAP information (e.g., in an | when message bodies persist without CoAP information (e.g., in an | |||
events log or analytics database). Generic CoAP software will still | events log or analytics database). Generic CoAP software will still | |||
use the CoAP response code. To support the use case of message body | use the CoAP response code. To support the use case of message-body | |||
persistence without support by the problem-details generator, the | persistence without support by the problem-details generator, the | |||
entity that persists the Concise Problem Details data item can copy | entity that persists the Concise Problem Details data item can copy | |||
over the CoAP response code that it received on the CoAP level. Note | over the CoAP response code that it received on the CoAP level. Note | |||
that the "response-code" value is a numeric representation of the | that the "response-code" value is a numeric representation of the | |||
actual code (see Section 3 of [RFC7252]), so it does not take the | actual code (see Section 3 of [RFC7252]), so it does not take the | |||
usual presentation form that resembles an HTTP status code -- 4.04 | usual presentation form that resembles an HTTP status code: 4.04 Not | |||
Not found is represented by the number 132. | Found is represented by the number 132. | |||
The "base-uri" member is usually not present in the initial request- | The "base-uri" member is usually not present in the initial request- | |||
response communication as it can be inferred as per Section 5.1.3 of | response communication as it can be inferred as per Section 5.1.3 of | |||
[STD66]. An entity that stores a Concise Problem Details data item | RFC 3986 [STD66]. An entity that stores a Concise Problem Details | |||
or otherwise makes it available for consumers without this context | data item or otherwise makes it available for consumers without this | |||
might add in a base-uri member to allow those consumers to perform | context might add in a "base-uri" member to allow those consumers to | |||
resolution of any relative URI references embedded in the data item. | perform resolution of any relative URI references embedded in the | |||
data item. | ||||
3. Extending Concise Problem Details | 3. Extending Concise Problem Details | |||
This specification defines a generic problem details container with | This specification defines a generic problem-details container with | |||
only a minimal set of attributes to make it usable. | only a minimal set of attributes to make it usable. | |||
It is expected that applications will extend the base format by | It is expected that applications will extend the base format by | |||
defining new attributes. | defining new attributes. | |||
These new attributes fall into two categories: generic and | These new attributes fall into two categories: generic and | |||
application specific. | application specific. | |||
Generic attributes will be allocated in the standard-problem-detail- | Generic attributes will be allocated in the standard-problem-detail- | |||
entries slot according to the registration procedure defined in | entries slot according to the registration procedure defined in | |||
Section 3.1. | Section 3.1. | |||
Application-specific attributes will be allocated in the custom- | Application-specific attributes will be allocated in the custom- | |||
problem-detail-entries slot according to the procedure described in | problem-detail-entries slot according to the procedure described in | |||
Section 3.2. | Section 3.2. | |||
Consumers of a Concise Problem Details data item MUST ignore any | Consumers of a Concise Problem Details data item MUST ignore any | |||
Standard or Custom Problem Detail entries, or keys inside the Custom | Standard Problem Detail entries or Custom Problem Detail entries, or | |||
Problem Detail entries, that they do not recognize ("ignore-unknown | keys inside the Custom Problem Detail entries, that they do not | |||
rule"); this allows problem details to evolve. When storing the data | recognize ("ignore-unknown rule"); this allows problem details to | |||
item for future use or forwarding it to other consumers, it is | evolve. When storing the data item for future use or forwarding it | |||
strongly RECOMMENDED to retain the unrecognized entries; exceptions | to other consumers, it is strongly RECOMMENDED to retain the | |||
might be when storage/forwarding occurs in a different format/ | unrecognized entries; exceptions might be when storage or forwarding | |||
protocol that cannot accommodate them, or when the storage/forwarding | occurs in a different format/protocol that cannot accommodate them or | |||
function needs to filter out privacy-sensitive information and for | when the storage or forwarding function needs to filter out privacy- | |||
that needs to assume unrecognized entries might be privacy-sensitive. | sensitive information and for that needs to assume unrecognized | |||
entries might be privacy-sensitive. | ||||
3.1. Standard Problem Detail Entries | 3.1. Standard Problem Detail Entries | |||
Beyond the Standard Problem Detail keys defined in Figure 2, | Beyond the Standard Problem Detail keys defined in Figure 2, | |||
additional Standard Problem Detail keys can be registered for use in | additional Standard Problem Detail keys can be registered for use in | |||
the standard-problem-detail-entries slot (see Section 6.1). | the standard-problem-detail-entries slot (see Section 6.1). | |||
Standard Problem Detail keys are negative integers, so they can never | Standard Problem Detail keys are negative integers, so they can never | |||
conflict with Custom Problem Detail keys defined for a specific | conflict with Custom Problem Detail keys defined for a specific | |||
application domain (which are unsigned integers or URIs.) | application domain (which are unsigned integers or URIs.) | |||
In summary, the keys for Standard Problem Detail entries are in a | In summary, the keys for Standard Problem Detail entries are in a | |||
global namespace that is not specific to a particular application | global namespace that is not specific to a particular application | |||
domain. | domain. | |||
3.1.1. Standard Problem Detail Entry: Unprocessed CoAP Option | 3.1.1. Standard Problem Detail Entry: Unprocessed CoAP Option | |||
Section 2 provides a number of generally applicable Standard Problem | Section 2 provides a number of generally applicable Standard Problem | |||
Detail Entries. The present section both registers another useful | Detail entries. The present section both registers another useful | |||
Standard Problem Detail entry and serves as an example of a Standard | Standard Problem Detail entry and serves as an example of a Standard | |||
Problem Detail Entry registration, in the registration template | Problem Detail Entry registration, in the registration template | |||
format that would be ready for registration. | format that would be ready for registration. | |||
| Key Value: TBD (assigned at registration) | Key value: | |||
| | -8 | |||
| Name: unprocessed-coap-option | Name: | |||
| | unprocessed-coap-option | |||
| CDDL type: one-or-more<uint>, where | CDDL type: | |||
| | one-or-more<uint>, where | |||
| one-or-more<T> = T / [ 2* T ] | one-or-more<T> = T / [ 2* T ] | |||
| | Brief description: | |||
| Brief description: Option number(s) of CoAP option(s) that were | Option number(s) of CoAP option(s) that were not understood | |||
| not understood | Specification reference: | |||
| | Section 3.1.1 of RFC 9290 | |||
| Specification reference: Section 3.1.1 of RFC XXXX | ||||
// RFC Editor: please replace RFC XXXX with the RFC number of this | ||||
// RFC and remove this note. | ||||
The specification of the Standard Problem Detail entry referenced by | The specification of the Standard Problem Detail entry referenced by | |||
the above registration template follows: | the above registration template follows: | |||
The Standard Problem Detail entry unprocessed-coap-option provides | The Standard Problem Detail entry unprocessed-coap-option provides | |||
the option number(s) of CoAP option(s) present in the request that | the option number or numbers of any CoAP options present in the | |||
could not be processed by the server. | request that could not be processed by the server. | |||
This may be a critical option that the server is unaware of, or an | This may be a critical option that the server is unaware of, or an | |||
option the server is aware of but could not process (and chose not | option the server is aware of but could not process (and chose not | |||
to, or was not allowed to, ignore it). | to, or was not allowed to, ignore it). | |||
The Concise Problem Details data item including this Standard Problem | The Concise Problem Details data item including this Standard Problem | |||
Detail Entry can be used in fulfillment of the "SHOULD" requirement | Detail Entry can be used in fulfillment of the "SHOULD" requirement | |||
in Section 5.4.1 of [RFC7252]. | in Section 5.4.1 of [RFC7252]. | |||
Several option numbers may be given in a list (in no particular | Several option numbers may be given in a list (in no particular | |||
order), without any guarantee that the list is a complete | order), without any guarantee that the list is a complete | |||
representation of all the problems in the request (as the server | representation of all the problems in the request (as the server | |||
might have stopped processing already at one of the problematic | might have stopped processing already at one of the problematic | |||
options). If an option with the given number was repeated, there is | options). If an option with the given number was repeated, there is | |||
no indication which of the values caused the error. | no indication which of the values caused the error. | |||
Clients need to expect seeing options in the list they did not send | Clients need to expect to see options in the list that they did not | |||
in the request; this can happen if the request traversed a proxy that | send in the request; this can happen if the request traversed a proxy | |||
added the option but did not act on the problem details response | that added the option but did not act on the problem-details response | |||
being returned by the origin server. | being returned by the origin server. | |||
Note that for a few special values of unprocessed CoAP options (such | For a few special values of unprocessed CoAP options (such as Accept | |||
as Accept or Proxy-Uri), there are special response codes (4.06 Not | or Proxy-Uri), note that there are special response codes (4.06 Not | |||
Acceptable, 5.05 Proxying Not Supported, respectively) to be sent | Acceptable, 5.05 Proxying Not Supported, respectively) to be sent | |||
instead of 4.02 Bad Option. | instead of 4.02 Bad Option. | |||
3.2. Custom Problem Detail Entries | 3.2. Custom Problem Detail Entries | |||
Applications may extend the Problem Details data item with additional | Applications may extend the Concise Problem Details data item with | |||
entries to convey additional, application-specific information. | additional entries to convey additional, application-specific | |||
information. | ||||
Such new entries are allocated in the custom-problem-detail-entries | Such new entries are allocated in the custom-problem-detail-entries | |||
slot, and carry a nested map specific to that application. The map | slot and carry a nested map specific to that application. The map | |||
key can either be an (absolute!) URI (under control of the entity | key can be either an (absolute!) URI (under control of the entity | |||
defining this extension), or an unsigned integer. Only the latter | defining this extension) or an unsigned integer. Only the latter | |||
needs to be registered (Section 6.2). | needs to be registered (Section 6.2). | |||
Within the nested map, any number of attributes can be given for a | Within the nested map, any number of attributes can be given for a | |||
single extension. The semantics of each custom attribute MUST be | single extension. The semantics of each custom attribute MUST be | |||
described in the documentation for the extension; for extensions that | described in the documentation for the extension; for extensions that | |||
are registered (i.e., are identified by an unsigned int) that | are registered (i.e., are identified by an unsigned int), that | |||
documentation goes along with the registration. | documentation goes along with the registration. | |||
The unsigned integer form allows a more compact representation. In | The unsigned integer form allows a more compact representation. In | |||
exchange, authors are expected to comply with the required | exchange, authors are expected to comply with the required | |||
registration and documentation process. In comparison, the URI form | registration and documentation process. In comparison, the URI form | |||
is less space-efficient but requires no registration. It is | is less space efficient but requires no registration. Therefore, it | |||
therefore useful for experimenting during the development cycle and | is useful for experimenting during the development cycle and for | |||
for applications deployed in environments where producers and | applications deployed in environments where producers and consumers | |||
consumers of Concise Problem Details are more tightly integrated. | of Concise Problem Details are more tightly integrated. (Thus, the | |||
(The URI form thus covers the potential need we might otherwise have | URI form covers the potential need we might otherwise have for a | |||
for a "private use" range for the unsigned integers.) | "Private Use" range for the unsigned integers.) | |||
Note that the URI given for the extension is for identification | Note that the URI given for the extension is for identification | |||
purposes only and, even if dereferenceable in principle, it MUST NOT | purposes only and, even if dereferenceable in principle, it MUST NOT | |||
be dereferenced in the normal course of handling problem details | be dereferenced in the normal course of handling problem details | |||
(i.e., outside diagnostic/debugging procedures involving humans). | (i.e., outside diagnostic or debugging procedures involving humans). | |||
Figure 3 shows an example (in CBOR diagnostic notation) of a custom | Figure 3 shows an example (in CBOR diagnostic notation) of a custom | |||
extension using a (made-up) URI as custom-problem-detail-entries key. | extension using a (made-up) URI as the custom-problem-detail-entries | |||
key. | ||||
{ | { | |||
/ title / -1: "title of the error", | / title / -1: "title of the error", | |||
/ detail / -2: "detailed information about the error", | / detail / -2: "detailed information about the error", | |||
/ instance / -3: "coaps://pd.example/FA317434", | / instance / -3: "coaps://pd.example/FA317434", | |||
/ response-code / -4: 128, / 4.00 / | / response-code / -4: 128, / 4.00 / | |||
"tag:3gpp.org,2022-03:TS29112": { | "tag:3gpp.org,2022-03:TS29112": { | |||
/ cause / 0: "machine-readable error cause", | / cause / 0: "machine-readable error cause", | |||
/ invalidParams / 1: [ | / invalidParams / 1: [ | |||
[ | [ | |||
/ param / "first parameter name", | / param / "first parameter name", | |||
/ reason / "must be a positive integer" | / reason / "must be a positive integer" | |||
], | ], | |||
[ | [ | |||
/ param / "second parameter name" | / param / "second parameter name" | |||
] | ] | |||
], | ], | |||
/ supportedFeatures / 2: "d34db33f" | / supportedFeatures / 2: "d34db33f" | |||
} | } | |||
} | } | |||
Figure 3: Example Extension with URI key | Figure 3: Example Extension with URI Key | |||
Obviously, an SDO like 3GPP can also easily register such a custom | Obviously, a Standards Development Organization (SDO) like 3GPP can | |||
problem detail entry to receive a more efficient unsigned integer | also easily register such a Custom Problem Detail entry to receive a | |||
key; Figure 4 shows how the same example would look like using a | more efficient unsigned integer key; Figure 4 shows how the same | |||
(made-up) registered unsigned int as custom-problem-detail-entries | example would look using a (made-up) registered unsigned int as the | |||
key: | custom-problem-detail-entries key: | |||
{ | { | |||
/ title / -1: "title of the error", | / title / -1: "title of the error", | |||
/ detail / -2: "detailed information about the error", | / detail / -2: "detailed information about the error", | |||
/ instance / -3: "coaps://pd.example/FA317434", | / instance / -3: "coaps://pd.example/FA317434", | |||
/ response-code / -4: 128, / 4.00 / | / response-code / -4: 128, / 4.00 / | |||
/4711 is made-up example key that is not actually registered:/ | /4711 is made-up example key that is not actually registered:/ | |||
4711: { | 4711: { | |||
/ cause / 0: "machine-readable error cause", | / cause / 0: "machine-readable error cause", | |||
/ invalidParams / 1: [ | / invalidParams / 1: [ | |||
[ | [ | |||
/ param / "first parameter name", | / param / "first parameter name", | |||
/ reason / "must be a positive integer" | / reason / "must be a positive integer" | |||
], | ||||
[ | ||||
/ param / "second parameter name" | ||||
] | ||||
], | ], | |||
/ supportedFeatures / 2: "d34db33f" | [ | |||
} | / param / "second parameter name" | |||
] | ||||
], | ||||
/ supportedFeatures / 2: "d34db33f" | ||||
} | } | |||
} | ||||
Figure 4: Example Extension with unsigned int (registered) key | Figure 4: Example Extension with Unsigned Int (Registered) Key | |||
In summary, the keys for the maps used inside Custom Problem Detail | In summary, the keys for the maps used inside Custom Problem Detail | |||
entries are defined specifically to the identifier of that Custom | entries are defined specifically for use with the identifier of that | |||
Problem Detail entry, the documentation of which defines these | Custom Problem Detail entry, the documentation of which defines these | |||
internal entries, typically chosen to address a given application | internal entries, typically chosen to address a given application | |||
domain. | domain. | |||
When there is a need to evolve a Custom Problem Detail entry | When there is a need to evolve a Custom Problem Detail entry | |||
definition, the "ignore-unknown rule" discussed in the introduction | definition, the "ignore-unknown rule" discussed in Section 3 provides | |||
to Section 3 provides an easy way to include additional information. | an easy way to include additional information. The assumption is | |||
The assumption is that this is done in a backward and forward | that this is done in a backward- and forward-compatible way. | |||
compatible way. Sometimes, Custom Problem Detail entries may need to | Sometimes, Custom Problem Detail entries may need to evolve in a way | |||
evolve in a way where forward compatibility by applying the "ignore- | where forward compatibility by applying the "ignore-unknown rule" | |||
unknown rule" would not be appropriate: e.g., when adding a "must- | would not be appropriate: for example, when adding a "must- | |||
understand" member, which can only be ignored at the peril of | understand" member, which can only be ignored at the peril of | |||
misunderstanding the Concise Problem Details data item ("false | misunderstanding the Concise Problem Details data item ("false | |||
interoperability"). In this case, a new Custom Problem Detail key | interoperability"). In this case, a new Custom Problem Detail key | |||
can simply be registered for this case, keeping the old key backward | can simply be registered for this case, keeping the old key backward | |||
and forward compatible. | and forward compatible. | |||
4. Privacy Considerations | 4. Privacy Considerations | |||
Problem details may unintentionally disclose information. This can | Problem details may unintentionally disclose information. This can | |||
lead to both privacy and security problems. See Section 5 for more | lead to both privacy and security problems. See Section 5 for more | |||
skipping to change at page 12, line 21 ¶ | skipping to change at line 481 ¶ | |||
Information (PII). | Information (PII). | |||
5. Security Considerations | 5. Security Considerations | |||
Concise Problem Details can contain URIs that are not intended to be | Concise Problem Details can contain URIs that are not intended to be | |||
dereferenced (Section 3.2, Paragraph 5). One reason is that | dereferenced (Section 3.2, Paragraph 5). One reason is that | |||
dereferencing these can lead to information disclosure (tracking). | dereferencing these can lead to information disclosure (tracking). | |||
Information disclosure can also be caused by URIs in problem details | Information disclosure can also be caused by URIs in problem details | |||
that _are_ intended for dereferencing, e.g., the "instance" URI. | that _are_ intended for dereferencing, e.g., the "instance" URI. | |||
Implementations need to consider which component of a client should | Implementations need to consider which component of a client should | |||
perform the dereferencing, and which servers are trusted with serving | perform the dereferencing and which servers are trusted with serving | |||
them. In any case, the security considerations of Section 7 of | them. In any case, the security considerations of Section 7 of RFC | |||
[STD66] apply. | 3986 [STD66] apply. | |||
The security and privacy considerations outlined in Section 5 of | The security and privacy considerations outlined in Section 5 of | |||
[RFC7807] apply in full. While these are phrased in terms of | [RFC7807] apply in full. While these are phrased in terms of | |||
security considerations for new RFC 7807 problem types, they equally | security considerations for new RFC 7807 problem types, they equally | |||
apply to the problem detail entry definitions used here Section 3; in | apply to the problem detail entry definitions used here (Section 3). | |||
summary: both when defining new detail entries, and when actually | In summary, both when defining new detail entries and when actually | |||
generating a Concise Problem Details data item, care needs to be | using them to generate a Concise Problem Details data item, care | |||
taken that they do not leak sensitive information. Entities storing | needs to be taken that they do not leak sensitive information. | |||
or forwarding Concise Problem Details data items need to consider | Entities storing or forwarding Concise Problem Details data items | |||
whether this leads to information being transferred out of the | need to consider whether this leads to information being transferred | |||
context within which access to sensitive information was acceptable. | out of the context within which access to sensitive information was | |||
See also Section 3, Paragraph 6 (the last paragraph of the | acceptable. See also Section 3, Paragraph 6 (the last paragraph of | |||
introduction to that section). Privacy-sensitive information in the | the introduction to that section). Privacy-sensitive information in | |||
problem details SHOULD NOT be obscured in ways that might lead to | the problem details SHOULD NOT be obscured in ways that might lead to | |||
misclassification as non-sensitive (e.g., by base64-encoding). | misclassification as non-sensitive (e.g., by base64-encoding). | |||
6. IANA Considerations | 6. IANA Considerations | |||
// RFC Editor: please replace RFC XXXX with the RFC number of this | 6.1. Standard Problem Detail Keys Registry | |||
// RFC and remove this note. | ||||
6.1. Standard Problem Detail Key registry | ||||
This specification defines a new sub-registry for Standard Problem | This specification defines a new subregistry titled "Standard Problem | |||
Detail Keys in the CoRE Parameters registry [IANA.core-parameters], | Detail Keys" in the "Constrained RESTful Environments (CoRE) | |||
with the policy "specification required" (Section 4.6 of [RFC8126]). | Parameters" registry [IANA.core-parameters], with "Specification | |||
Required" as the Registration Procedure (Section 4.6 of [RFC8126]). | ||||
Each entry in the registry must include: | Each entry in the registry must include: | |||
Key value: | Key Value: | |||
a negative integer to be used as the value of the key | a negative integer to be used as the value of the key | |||
Name: | Name: | |||
a name that could be used in implementations for the key | a name that could be used in implementations for the key | |||
CDDL type: | CDDL Type: | |||
type of the data associated with the key in CDDL notation | type of the data associated with the key in CDDL notation | |||
Brief description: | Brief Description: | |||
a brief description | a brief description | |||
Change Controller: | ||||
(see Section 2.3 of [RFC8126]) | ||||
Reference: | Reference: | |||
a reference document | a reference document | |||
The expert is requested to assign the shortest key values (1+0 and | Change Controller: | |||
1+1 encoding) to registrations that are likely to enjoy wide use and | (see Section 2.3 of [RFC8126]) | |||
can benefit from short encodings. | ||||
To be immediately useful in CDDL and programming language contexts, a | The designated expert is requested to assign the shortest key values | |||
name consists of a lower-case ASCII letter (a-z) and zero or more | (1+0 and 1+1 encoding) to registrations that are likely to enjoy wide | |||
additional ASCII characters that are either lower-case letters, | use and can benefit from short encodings. | |||
To be immediately useful in CDDL and programming-language contexts, a | ||||
name consists of a lowercase ASCII letter (a-z) and zero or more | ||||
additional ASCII characters that are either lowercase letters, | ||||
digits, or a hyphen-minus, i.e., it matches [a-z][-a-z0-9]*. As with | digits, or a hyphen-minus, i.e., it matches [a-z][-a-z0-9]*. As with | |||
the key values, names need to be unique. | the key values, names need to be unique. | |||
The specification in the reference document needs to provide a | The specification in the reference document needs to provide a | |||
description of the Standard Problem Detail entry, replicating the | description of the Standard Problem Detail entry, replicating the | |||
CDDL description in "CDDL type", and describing the semantics of the | CDDL description in "CDDL Type", and describing the semantics of the | |||
presence of this entry and the semantics of the value given with it. | presence of this entry and the semantics of the value given with it. | |||
Initial entries in this sub-registry are as follows: | Initial entries in this subregistry are as follows: | |||
+=======+==============+=================+=============+===========+ | +=====+============+===============+===========+=========+==========+ | |||
| Key | Name | CDDL Type | Brief | Reference | | |Key |Name |CDDL Type |Brief |Reference|Change | | |||
| value | | | description | | | |Value| | |Description| |Controller| | |||
+=======+==============+=================+=============+===========+ | +=====+============+===============+===========+=========+==========+ | |||
| -1 | title | text / tag38 | short, | RFC XXXX | | |-1 |title |text / tag38 |Short, |RFC 9290 |IETF | | |||
| | | | human- | | | | | | |human- | | | | |||
| | | | readable | | | | | | |readable | | | | |||
| | | | summary of | | | | | | |summary of | | | | |||
| | | | the problem | | | | | | |the problem| | | | |||
| | | | shape | | | | | | |shape | | | | |||
+-------+--------------+-----------------+-------------+-----------+ | +-----+------------+---------------+-----------+---------+----------+ | |||
| -2 | detail | text / tag38 | human- | RFC XXXX | | |-2 |detail |text / tag38 |Human- |RFC 9290 |IETF | | |||
| | | | readable | | | | | | |readable | | | | |||
| | | | explanation | | | | | | |explanation| | | | |||
| | | | specific to | | | | | | |specific to| | | | |||
| | | | this | | | | | | |this | | | | |||
| | | | occurrence | | | | | | |occurrence | | | | |||
| | | | of the | | | | | | |of the | | | | |||
| | | | problem | | | | | | |problem | | | | |||
+-------+--------------+-----------------+-------------+-----------+ | +-----+------------+---------------+-----------+---------+----------+ | |||
| -3 | instance | ~uri | URI | RFC XXXX | | |-3 |instance |~uri |URI |RFC 9290 |IETF | | |||
| | | | reference | | | | | | |reference | | | | |||
| | | | identifying | | | | | | |identifying| | | | |||
| | | | specific | | | | | | |specific | | | | |||
| | | | occurrence | | | | | | |occurrence | | | | |||
| | | | of the | | | | | | |of the | | | | |||
| | | | problem | | | | | | |problem | | | | |||
+-------+--------------+-----------------+-------------+-----------+ | +-----+------------+---------------+-----------+---------+----------+ | |||
| -4 | response- | uint .size 1 | CoAP | RFC XXXX | | |-4 |response- |uint .size 1 |CoAP |RFC 9290 |IETF | | |||
| | code | | response | | | | |code | |response | | | | |||
| | | | code | | | | | | |code | | | | |||
+-------+--------------+-----------------+-------------+-----------+ | +-----+------------+---------------+-----------+---------+----------+ | |||
| -5 | base-uri | ~uri | Base URI | RFC XXXX | | |-5 |base-uri |~uri |Base URI |RFC 9290 |IETF | | |||
+-------+--------------+-----------------+-------------+-----------+ | +-----+------------+---------------+-----------+---------+----------+ | |||
| -6 | base-lang | tag38-ltag | Base | RFC XXXX | | |-6 |base-lang |tag38-ltag |Base |RFC 9290 |IETF | | |||
| | | | language | | | | | | |language | | | | |||
| | | | tag (see | | | | | | |tag (see | | | | |||
| | | | Appendix A) | | | | | | |Appendix A)| | | | |||
+-------+--------------+-----------------+-------------+-----------+ | +-----+------------+---------------+-----------+---------+----------+ | |||
| -7 | base-rtl | tag38-direction | Base | RFC XXXX | | |-7 |base-rtl |tag38-direction|Base |RFC 9290 |IETF | | |||
| | | | writing | | | | | | |writing | | | | |||
| | | | direction | | | | | | |direction | | | | |||
| | | | (see | | | | | | |(see | | | | |||
| | | | Appendix A) | | | | | | |Appendix A)| | | | |||
+-------+--------------+-----------------+-------------+-----------+ | +-----+------------+---------------+-----------+---------+----------+ | |||
| TBD | unprocessed- | one-or- | Option | RFC XXXX, | | |-8 |unprocessed-|one-or- |Option |RFC 9290,|IETF | | |||
| | coap-option | more<uint> | number(s) | Section | | | |coap-option |more<uint> |number(s) |Section | | | |||
| | | | of CoAP | 3.1.1 | | | | | |of CoAP |3.1.1 | | | |||
| | | | option(s) | | | | | | |option(s) | | | | |||
| | | | that were | | | | | | |that were | | | | |||
| | | | not | | | | | | |not | | | | |||
| | | | understood | | | | | | |understood | | | | |||
+-------+--------------+-----------------+-------------+-----------+ | +-----+------------+---------------+-----------+---------+----------+ | |||
Table 1: Initial Entries in the Standard Problem Detail Key registry | Table 1: Initial Entries in the Standard Problem Detail Keys Registry | |||
6.2. Custom Problem Detail Key registry | 6.2. Custom Problem Detail Keys Registry | |||
This specification defines a new sub-registry for Custom Problem | This specification defines a new subregistry titled "Custom Problem | |||
Detail Keys in the CoRE Parameters registry [IANA.core-parameters], | Detail Keys" in the "Constrained RESTful Environments (CoRE) | |||
with the policy "expert review" (Section 4.5 of [RFC8126]). | Parameters" registry [IANA.core-parameters], with as "Expert Review" | |||
as the Registration Procedure (Section 4.5 of [RFC8126]). | ||||
The expert is instructed to attempt making the registration | The designated expert is instructed to attempt making the | |||
experience as close to first-come-first-served as reasonably | registration experience as close to First Come First Served as | |||
achievable, but checking that the reference document does provide a | reasonably achievable, but checking that the reference document does | |||
description as set out below. (This requirement is a relaxed version | provide a description as set out below. (This requirement is a | |||
of "specification required" as defined in Section 4.6 of [RFC8126].) | relaxed version of "Specification Required" as defined in Section 4.6 | |||
of [RFC8126].) | ||||
Each entry in the registry must include: | Each entry in the registry must include: | |||
Key value: | Key Value: | |||
an unsigned integer to be used as the value of the key | an unsigned integer to be used as the value of the key | |||
Name: | Name: | |||
a name that could be used in implementations for the key | a name that could be used in implementations for the key | |||
Brief description: | Brief Description: | |||
a brief description | a brief description | |||
Change Controller: | ||||
(see Section 2.3 of [RFC8126]) | ||||
Reference: | Reference: | |||
a reference document that provides a description of the map, | a reference document that provides a description of the map, | |||
including a CDDL description, that describes all inside keys and | including a CDDL description, that describes all inside keys and | |||
values | values | |||
The expert is requested to assign the shortest key values (1+0 and | Change Controller | |||
1+1 encoding) to registrations that are likely to enjoy wide use and | (see Section 2.3 of [RFC8126]) | |||
can benefit from short encodings. | ||||
To be immediately useful in CDDL and programming language contexts, a | The designated expert is requested to assign the shortest key values | |||
name consists of a lower-case ASCII letter (a-z) and zero or more | (1+0 and 1+1 encoding) to registrations that are likely to enjoy wide | |||
additional ASCII characters that are either lower-case letters, | use and can benefit from short encodings. | |||
To be immediately useful in CDDL and programming-language contexts, a | ||||
name consists of a lowercase ASCII letter (a-z) and zero or more | ||||
additional ASCII characters that are either lowercase letters, | ||||
digits, or a hyphen-minus, i.e., it matches [a-z][-a-z0-9]*. As with | digits, or a hyphen-minus, i.e., it matches [a-z][-a-z0-9]*. As with | |||
the key values, names need to be unique. | the key values, names need to be unique. | |||
Initial entries in this sub-registry are as follows: | Initial entries in this subregistry are as follows: | |||
+=======+=============+===========================+===========+ | +=======+=============+====================+===========+============+ | |||
| Key | Name | Brief description | Reference | | | Key | Name | Brief | Reference | Change | | |||
| value | | | | | | Value | | Description | | Controller | | |||
+=======+=============+===========================+===========+ | +=======+=============+====================+===========+============+ | |||
| 7807 | tunnel-7807 | Carry RFC 7807 problem | RFC XXXX, | | | 7807 | tunnel-7807 | Carry RFC 7807 | RFC 9290, | IETF | | |||
| | | details in a Concise | Appendix | | | | | problem details | Appendix | | | |||
| | | Problem Details data item | B | | | | | in a Concise | B | | | |||
+-------+-------------+---------------------------+-----------+ | | | | Problem Details | | | | |||
| | | data item | | | | ||||
+-------+-------------+--------------------+-----------+------------+ | ||||
Table 2: Initial Entries in the Custom Problem Detail Key | Table 2: Initial Entries in the Custom Problem Detail Key Registry | |||
registry | ||||
6.3. Media Type | 6.3. Media Type | |||
IANA is requested to add the following Media-Type to the "Media | IANA has added the following media type to the "Media Types" registry | |||
Types" registry [IANA.media-types]. | [IANA.media-types]. | |||
+============================+============================+=========+ | +============================+============================+=========+ | |||
|Name |Template |Reference| | |Name |Template |Reference| | |||
+============================+============================+=========+ | +============================+============================+=========+ | |||
|concise-problem-details+cbor|application/concise-problem-|RFC XXXX,| | |concise-problem-details+cbor|application/concise-problem-|RFC 9290,| | |||
| |details+cbor |Section | | | |details+cbor |Section | | |||
| | |6.3 | | | | |6.3 | | |||
+----------------------------+----------------------------+---------+ | +----------------------------+----------------------------+---------+ | |||
Table 3: New Media Type application/concise-problem-details+cbor | Table 3: New Media Type 'application/concise-problem-details+cbor' | |||
Type name: application | Type name: application | |||
Subtype name: concise-problem-details+cbor | Subtype name: concise-problem-details+cbor | |||
Required parameters: N/A | Required parameters: N/A | |||
Optional parameters: N/A | Optional parameters: N/A | |||
Encoding considerations: binary (CBOR data item) | Encoding considerations: binary (CBOR data item) | |||
Security considerations: Section 5 of RFC XXXX | ||||
Security considerations: Section 5 of RFC 9290 | ||||
Interoperability considerations: none | Interoperability considerations: none | |||
Published specification: Section 6.3 of RFC XXXX | ||||
Published specification: Section 6.3 of RFC 9290 | ||||
Applications that use this media type: Clients and servers in the | Applications that use this media type: Clients and servers in the | |||
Internet of Things | Internet of Things | |||
Fragment identifier considerations: The syntax and semantics of | Fragment identifier considerations: The syntax and semantics of | |||
fragment identifiers is as specified for "application/cbor". (At | fragment identifiers is as specified for "application/cbor". (At | |||
publication of RFC XXXX, there is no fragment identification | publication of RFC 9290, there is no fragment identification | |||
syntax defined for "application/cbor".) | syntax defined for "application/cbor".) | |||
Additional information: | ||||
Deprecated alias names for this type: N/A | ||||
Magic number(s): N/A | ||||
File extension(s): N/A | ||||
Macintosh file type code(s): N/A | ||||
Person & email address to contact for further information: CoRE WG | Person & email address to contact for further information: CoRE WG | |||
mailing list (core@ietf.org), or IETF Applications and Real-Time | mailing list (core@ietf.org) or IETF Applications and Real-Time | |||
Area (art@ietf.org) | Area (art@ietf.org) | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: none | Restrictions on usage: none | |||
Author/Change controller: IETF | Author/Change controller: IETF | |||
Provisional registration: no | Provisional registration: no | |||
6.4. Content-Format | 6.4. Content-Format | |||
IANA is requested to register a Content-Format number in the "CoAP | IANA has registered a Content-Format number in the "CoAP | |||
Content-Formats" sub-registry, within the "Constrained RESTful | Content-Formats" subregistry, within the "Constrained RESTful | |||
Environments (CoRE) Parameters" Registry [IANA.core-parameters], as | Environments (CoRE) Parameters" registry [IANA.core-parameters], as | |||
follows: | follows: | |||
+==============================+================+======+===========+ | +==============================+==========+=====+===========+ | |||
| Content-Type | Content Coding | ID | Reference | | | Media Type | Encoding | ID | Reference | | |||
+==============================+================+======+===========+ | +==============================+==========+=====+===========+ | |||
| application/concise-problem- | - | TBD1 | RFC XXXX | | | application/concise-problem- | - | 257 | RFC 9290 | | |||
| details+cbor | | | | | | details+cbor | | | | | |||
+------------------------------+----------------+------+-----------+ | +------------------------------+----------+-----+-----------+ | |||
Table 4: New Content-Format | ||||
TBD1 is to be assigned from the space 256..999. | ||||
In the registry as defined by Section 12.3 of [RFC7252] at the time | Table 4: Content-Format Registration | |||
of writing, the column "Content-Type" is called "Media type" and the | ||||
column "Content Coding" is called "Encoding". | ||||
// This paragraph to be removed by RFC editor. | ||||
6.5. CBOR Tag 38 | 6.5. CBOR Tag 38 | |||
In the registry "CBOR Tags" [IANA.cbor-tags], IANA has registered | In the registry "CBOR Tags" [IANA.cbor-tags], IANA has registered | |||
CBOR Tag 38. IANA is requested to replace the reference for this | CBOR tag 38. IANA has updated the reference for CBOR tag 38 to point | |||
registration with Appendix A, RFC XXXX. | to RFC 9290, Appendix A. | |||
7. References | 7. References | |||
7.1. Normative References | 7.1. Normative References | |||
[IANA.cbor-tags] | [IANA.cbor-tags] | |||
IANA, "Concise Binary Object Representation (CBOR) Tags", | IANA, "Concise Binary Object Representation (CBOR) Tags", | |||
19 September 2013, | ||||
<https://www.iana.org/assignments/cbor-tags>. | <https://www.iana.org/assignments/cbor-tags>. | |||
[IANA.core-parameters] | [IANA.core-parameters] | |||
IANA, "Constrained RESTful Environments (CoRE) | IANA, "Constrained RESTful Environments (CoRE) | |||
Parameters", 8 June 2012, | Parameters", | |||
<https://www.iana.org/assignments/core-parameters>. | <https://www.iana.org/assignments/core-parameters>. | |||
[IANA.media-types] | [IANA.media-types] | |||
IANA, "Provisional Standard Media Type Registry", 20 July | IANA, "Provisional Standard Media Type Registry", | |||
2012, <https://www.iana.org/assignments/provisional- | <https://www.iana.org/assignments/provisional-standard- | |||
standard-media-types>. | media-types>. | |||
[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, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC4647] Phillips, A., Ed. and M. Davis, Ed., "Matching of Language | [RFC4647] Phillips, A., Ed. and M. Davis, Ed., "Matching of Language | |||
Tags", BCP 47, RFC 4647, DOI 10.17487/RFC4647, September | Tags", BCP 47, RFC 4647, DOI 10.17487/RFC4647, September | |||
2006, <https://www.rfc-editor.org/info/rfc4647>. | 2006, <https://www.rfc-editor.org/info/rfc4647>. | |||
skipping to change at page 18, line 44 ¶ | skipping to change at line 802 ¶ | |||
JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
June 2019, <https://www.rfc-editor.org/info/rfc8610>. | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
[RFC9165] Bormann, C., "Additional Control Operators for the Concise | [RFC9165] Bormann, C., "Additional Control Operators for the Concise | |||
Data Definition Language (CDDL)", RFC 9165, | Data Definition Language (CDDL)", RFC 9165, | |||
DOI 10.17487/RFC9165, December 2021, | DOI 10.17487/RFC9165, December 2021, | |||
<https://www.rfc-editor.org/info/rfc9165>. | <https://www.rfc-editor.org/info/rfc9165>. | |||
[STD66] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [STD66] 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, DOI 10.17487/RFC3986, January 2005, | RFC 3986, January 2005. | |||
<https://www.rfc-editor.org/info/rfc3986>. | ||||
<https://www.rfc-editor.org/info/std66> | ||||
[STD94] Bormann, C. and P. Hoffman, "Concise Binary Object | [STD94] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, December 2020. | |||
DOI 10.17487/RFC8949, December 2020, | ||||
<https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/std94> | |||
7.2. Informative References | 7.2. Informative References | |||
[I-D.ietf-httpapi-rfc7807bis] | [HTTPAPI] Nottingham, M., Wilde, E., and S. Dalal, "Problem Details | |||
Nottingham, M., Wilde, E., and S. Dalal, "Problem Details | ||||
for HTTP APIs", Work in Progress, Internet-Draft, draft- | for HTTP APIs", Work in Progress, Internet-Draft, draft- | |||
ietf-httpapi-rfc7807bis-03, 25 May 2022, | ietf-httpapi-rfc7807bis-04, 5 September 2022, | |||
<https://www.ietf.org/archive/id/draft-ietf-httpapi- | <https://datatracker.ietf.org/doc/html/draft-ietf-httpapi- | |||
rfc7807bis-03.txt>. | rfc7807bis-04>. | |||
[RDF] Cyganiak, R., Wood, D., and M. Lanthaler, "RDF 1.1 | [RDF] Cyganiak, R., Wood, D., and M. Lanthaler, "RDF 1.1 | |||
Concepts and Abstract Syntax", W3C Recommendation, 25 | Concepts and Abstract Syntax", W3C Recommendation, 25 | |||
February 2014, | February 2014, | |||
<http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/>. | <http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/>. | |||
[RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | |||
<https://www.rfc-editor.org/info/rfc4648>. | <https://www.rfc-editor.org/info/rfc4648>. | |||
[RFC6082] Whistler, K., Adams, G., Duerst, M., Presuhn, R., Ed., and | [RFC6082] Whistler, K., Adams, G., Duerst, M., Presuhn, R., Ed., and | |||
J. Klensin, "Deprecating Unicode Language Tag Characters: | J. Klensin, "Deprecating Unicode Language Tag Characters: | |||
RFC 2482 is Historic", RFC 6082, DOI 10.17487/RFC6082, | RFC 2482 is Historic", RFC 6082, DOI 10.17487/RFC6082, | |||
November 2010, <https://www.rfc-editor.org/info/rfc6082>. | November 2010, <https://www.rfc-editor.org/info/rfc6082>. | |||
[Unicode-14.0.0] | [Unicode-14.0.0] | |||
The Unicode Consortium, "The Unicode Standard, Version | The Unicode Consortium, "The Unicode Standard, Version | |||
14.0.0", Mountain View: The Unicode Consortium, | 14.0.0", Mountain View: The Unicode Consortium, | |||
ISBN 978-1-936213-29-0, September 2021, | ISBN 978-1-936213-29-0, September 2021, | |||
<https://www.unicode.org/versions/Unicode14.0.0/>. Note | <https://www.unicode.org/versions/Unicode14.0.0/>. | |||
that while this document references a version that was | ||||
recent at the time of writing, the statements made based | ||||
on this version are expected to remain valid for future | ||||
versions. | ||||
[Unicode-14.0.0-bidi] | [Unicode-14.0.0-bidi] | |||
The Unicode Consortium, "Unicode® Standard Annex #9 --- | The Unicode Consortium, "Unicode Standard Annex #9 --- | |||
Unicode Bidirectional Algorithm", 27 August 2021, | Unicode Bidirectional Algorithm", 27 August 2021, | |||
<https://www.unicode.org/reports/ | <https://www.unicode.org/reports/ | |||
tr9/#Markup_And_Formatting>. Note that while this | tr9/#Markup_And_Formatting>. | |||
document references a version that was recent at the time | ||||
of writing, the statements made based on this version are | ||||
expected to remain valid for future versions. | ||||
Appendix A. Language-Tagged Strings | Appendix A. Language-Tagged Strings | |||
This appendix serves as the archival documentation for CBOR Tag 38, a | This appendix serves as the archival documentation for CBOR tag 38, a | |||
tag for serializing language-tagged text strings in CBOR. The text | tag for serializing language-tagged text strings in CBOR. The text | |||
of this appendix is adapted from the specification text supplied for | of this appendix is adapted from the specification text supplied for | |||
its initial registration. It has been extended to allow | its initial registration. It has been extended to allow | |||
supplementing the language tag by a direction indication. | supplementing the language tag by a direction indication. | |||
As with any IANA-registered item, a specification that further | As with any IANA-registered item, a specification that further | |||
updates this registration needs to update the reference column of the | updates this registration needs to update the reference column of the | |||
IANA registry (see Section 6.5). Future specifications may update | IANA registry (see Section 6.5). Future specifications may update | |||
this appendix, other parts of this document, or both. (When updating | this appendix, other parts of this document, or both. (When updating | |||
this appendix, keep in mind that applications beyond concise problem | this appendix, keep in mind that applications beyond Concise Problem | |||
details may adopt the tag defined here.) Users of this tag are | Details data items may adopt the tag defined here.) Users of this | |||
advised to consult the registry to obtain the most recent update for | tag are advised to consult the registry to obtain the most recent | |||
this appendix. | update for this appendix. | |||
A.1. Introduction | A.1. Introduction | |||
In some cases it is useful to specify the natural language of a text | In some cases, it is useful to specify the natural language of a text | |||
string. This specification defines a tag that does just that. One | string. This specification defines a tag that does just that. One | |||
technology that supports language-tagged strings is the Resource | technology that supports language-tagged strings is the Resource | |||
Description Framework (RDF) [RDF]. | Description Framework (RDF) [RDF]. | |||
A.2. Detailed Semantics | A.2. Detailed Semantics | |||
A language-tagged string in CBOR has the tag 38 and consists of an | A language-tagged text string in CBOR has the tag 38 and consists of | |||
array with a length of 2 or 3. | an array with a length of 2 or 3. | |||
The first element is a well-formed language tag under Best Current | The first element is a well-formed language tag described in BCP 47 | |||
Practice 47 ([RFC5646] and [RFC4647]), represented as a UTF-8 text | ([RFC5646] and [RFC4647]), represented as a UTF-8 text string (major | |||
string (major type 3). | type 3). | |||
The second element is an arbitrary UTF-8 text string (major type 3). | The second element is an arbitrary UTF-8 text string (major type 3). | |||
Both the language tag and the arbitrary string can optionally be | Both the language tag and the arbitrary string can optionally be | |||
annotated with CBOR tags; this is not shown in the CDDL below. | annotated with CBOR tags; this is not shown in the CDDL below. | |||
The optional third element, if present, represents a ternary value | The optional third element, if present, represents a ternary value | |||
that indicates a direction, as follows: | that indicates a direction, as follows: | |||
* false: left-to-right direction ("ltr"). The text is expected to | * false: left-to-right direction ("ltr"). The text is expected to | |||
be displayed with left-to-right base direction if standalone, and | be displayed with left-to-right base direction if standalone and | |||
isolated with left-to-right direction (as if enclosed in LRI ... | isolated with left-to-right direction (as if enclosed in LRI ... | |||
PDI or equivalent, see [Unicode-14.0.0-bidi]) in the context of a | PDI or equivalent, see [Unicode-14.0.0-bidi]) in the context of a | |||
longer string or text. | longer string or text. | |||
* true: right-to-left direction ("rtl"). The text is expected to be | * true: right-to-left direction ("rtl"). The text is expected to be | |||
displayed with right-to-left base direction if standalone, and | displayed with right-to-left base direction if standalone and | |||
isolated with right-to-left direction (as if enclosed in RLI ... | isolated with right-to-left direction (as if enclosed in RLI ... | |||
PDI or equivalent, see [Unicode-14.0.0-bidi]) in the context of a | PDI or equivalent, see [Unicode-14.0.0-bidi]) in the context of a | |||
longer string or text. | longer string or text. | |||
* null indicates that no indication is made about the direction | * null: indicates that no indication is made about the direction | |||
("auto"), enabling an internationalization library to make an | ("auto"), enabling an internationalization library to make an | |||
auto-detection decision such as treating the string as if enclosed | auto-detection decision such as treating the string as if enclosed | |||
in FSI ... PDI or equivalent, see [Unicode-14.0.0-bidi]. | in FSI ... PDI or equivalent, see [Unicode-14.0.0-bidi]. | |||
If the third element is absent, directionality context may be | If the third element is absent, directionality context may be applied | |||
applying (e.g., base directionality information for an entire CBOR | (e.g., base-directionality information for an entire CBOR message or | |||
message or part thereof). If there is no directionality context | part thereof). If there is no directionality context applied, the | |||
applying, the default interpretation is the same as for null | default interpretation is the same as for null ("auto"). | |||
("auto"). | ||||
In CDDL: | In CDDL: | |||
tag38 = #6.38([tag38-ltag, text, ?tag38-direction]) | tag38 = #6.38([tag38-ltag, text, ?tag38-direction]) | |||
tag38-ltag = text .regexp "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*" | tag38-ltag = text .regexp "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*" | |||
tag38-direction = &(ltr: false, rtl: true, auto: null) | tag38-direction = &(ltr: false, rtl: true, auto: null) | |||
NOTE: Language tags of any combination of case are allowed. But | NOTE: Language tags of any combination of case are allowed. But | |||
Section 2.1.1 of [RFC5646], part of Best Current Practice 47, | Section 2.1.1 of [RFC5646], part of BCP 47, recommends a case | |||
recommends a case combination for language tags that encoders that | combination for language tags that encoders that support tag 38 may | |||
support tag 38 may wish to follow when generating language tags. | wish to follow when generating language tags. | |||
Data items with tag 38 that do not meet the criteria above are not | Data items with tag 38 that do not meet the criteria above are not | |||
valid (see Section 5.3.2 of [STD94]). | valid (see Section 5.3.2 of RFC 8949 [STD94]). | |||
NOTE: The Unicode Standard [Unicode-14.0.0] includes a set of | NOTE: The Unicode Standard [Unicode-14.0.0] includes a set of | |||
characters designed for tagging text (including language tagging), in | characters designed for tagging text (including language tagging) in | |||
the range U+E0000 to U+E007F. Although many applications, including | the range U+E0000 to U+E007F. Although many applications, including | |||
RDF, do not disallow these characters in text strings, the Unicode | RDF, do not disallow these characters in text strings, the Unicode | |||
Consortium has deprecated these characters and recommends annotating | Consortium has deprecated these characters and recommends annotating | |||
language via a higher-level protocol instead. See the section | language via a higher-level protocol instead. See the section | |||
"Deprecated Tag Characters" in Section 23.9 of [Unicode-14.0.0], as | "Deprecated Tag Characters" in Section 23.9 of [Unicode-14.0.0] as | |||
well as [RFC6082]. | well as [RFC6082]. | |||
NOTE: while this document references a version of Unicode that was | ||||
recent at the time of writing, the statements made based on this | ||||
version are expected to remain valid for future versions. | ||||
A.3. Examples | A.3. Examples | |||
Examples in this section are given in CBOR diagnostic notation first | Examples in this section are given in CBOR diagnostic notation first | |||
and then as a pretty-printed hexadecimal representation of the | and then as a pretty-printed hexadecimal representation of the | |||
encoded item. | encoded item. | |||
The following example shows how the English-language string "Hello" | The following example shows how the English-language string "Hello" | |||
is represented. | is represented. | |||
38(["en", "Hello"]) | 38(["en", "Hello"]) | |||
skipping to change at page 22, line 17 ¶ | skipping to change at line 964 ¶ | |||
38(["fr", "Bonjour"]) | 38(["fr", "Bonjour"]) | |||
D8 26 # tag(38) | D8 26 # tag(38) | |||
82 # array(2) | 82 # array(2) | |||
62 # text(2) | 62 # text(2) | |||
6672 # "fr" | 6672 # "fr" | |||
67 # text(7) | 67 # text(7) | |||
426F6E6A6F7572 # "Bonjour" | 426F6E6A6F7572 # "Bonjour" | |||
The following example shows how the Hebrew-language string "שלום" | The following example uses right-to-left (RTL) script, which in the | |||
(HEBREW LETTER SHIN, HEBREW LETTER LAMED, HEBREW LETTER VAV, HEBREW | context of this specification may be rendered differently by | |||
LETTER FINAL MEM, U+05E9 U+05DC U+05D5 U+05DD) is represented. Note | different document presentation environments. The descriptive text | |||
the rtl direction expressed by setting the third element in the array | may be more reliable to follow than the necessarily device- and | |||
to "true". | application-specific rendering. The example shows how the Hebrew- | |||
language string | ||||
שלום | ||||
is represented, where in direction of reading, the sequence of | ||||
characters is: "ש" (HEBREW LETTER SHIN, U+05E9), "ל" (HEBREW LETTER | ||||
LAMED, U+05DC), "ו" (HEBREW LETTER VAV, U+05D5), "ם" (HEBREW LETTER | ||||
FINAL MEM, U+05DD). Note the rtl direction expressed by setting the | ||||
third element in the array to "true". | ||||
38(["he", "שלום", true]) | 38(["he", "שלום", true]) | |||
D8 26 # tag(38) | D8 26 # tag(38) | |||
83 # array(3) | 83 # array(3) | |||
62 # text(2) | 62 # text(2) | |||
6865 # "he" | 6865 # "he" | |||
68 # text(8) | 68 # text(8) | |||
D7A9D79CD795D79D # "שלום" | D7A9D79CD795D79D # "שלום" | |||
F5 # primitive(21) | F5 # primitive(21) | |||
Appendix B. Interworking with RFC 7807 | Appendix B. Interworking with RFC 7807 | |||
On certain occasions, it will be necessary to carry ("tunnel") | On certain occasions, it will be necessary to carry ("tunnel") | |||
[RFC7807] problem details in a Concise Problem Details data item. | [RFC7807] problem details in a Concise Problem Details data item. | |||
This appendix defines a Custom Problem Details entry for that | This appendix defines a Custom Problem Detail entry for that purpose. | |||
purpose. This is assigned Custom Problem Detail key 7807 in | This is assigned Custom Problem Detail key 7807 in Section 6.2. Its | |||
Section 6.2. Its structure is: | structure is: | |||
tunnel-7807 = { | tunnel-7807 = { | |||
? &(type: 0) => ~uri | ? &(type: 0) => ~uri | |||
? &(status: 1) => 0..999 | ? &(status: 1) => 0..999 | |||
* text => any | * text => any | |||
} | } | |||
To carry an [RFC7807] problem details JSON object in a Concise | To carry an [RFC7807] problem details JSON object in a Concise | |||
Problem Details data item, first convert the JSON object to CBOR as | Problem Details data item, first convert the JSON object to CBOR as | |||
per Section 6.2 of [STD94]. Create an empty Concise Problem Details | per Section 6.2 of RFC 8949 [STD94]. Create an empty Concise Problem | |||
data item. | Details data item. | |||
Move the values for "title", "detail", and "instance", if present, | Move the values for "title", "detail", and "instance", if present, | |||
from the [RFC7807] problem details to the equivalent Standard Problem | from the [RFC7807] problem details to the equivalent Standard Problem | |||
Detail entries. Create a Custom Problem Details entry with key 7807. | Detail entries. Create a Custom Problem Detail entry with key 7807. | |||
Move the values for "type" and "status", if present, to the | Move the values for "type" and "status", if present, to the | |||
equivalent keys 0 and 1 of the Custom Problem Details entry. Move | equivalent keys 0 and 1 of the Custom Problem Detail entry. Move all | |||
all remaining key/value pairs (additional members as per Section 3.2 | remaining key/value pairs (additional members as per Section 3.2 of | |||
of [RFC7807]) in the converted [RFC7807] problem details object to | [RFC7807]) in the converted [RFC7807] problem details object to the | |||
the Custom Problem Details map unchanged. | Custom Problem Detail map unchanged. | |||
The inverse direction, carrying Concise Problem Details in a Problem | The inverse direction, carrying Concise Problem Details in an RFC | |||
Details JSON object requires the additional support provided by | 7807 problem details JSON object requires the additional support | |||
[I-D.ietf-httpapi-rfc7807bis], which is planned to create the HTTP | provided by [HTTPAPI], which is planned to create the HTTP Problem | |||
Problem Types Registry. An HTTP Problem Type can then be registered | Types Registry. An HTTP Problem Type can then be registered that | |||
that extracts top-level items from the Concise Problem Details data | extracts top-level items from the Concise Problem Details data item | |||
item in a similar way to the conversion described above, and which | in a similar way to the conversion described above and that carries | |||
carries the rest of the Concise Problem Details data item in an | the rest of the Concise Problem Details data item in an additional | |||
additional member via base64url encoding without padding (Section 5 | member via base64url encoding without padding (Section 5 of | |||
of [RFC4648]). Details can be defined in a separate document when | [RFC4648]). Details can be defined in a separate document when the | |||
the work on [I-D.ietf-httpapi-rfc7807bis] is completed. | work on [HTTPAPI] is completed. | |||
Acknowledgments | Acknowledgments | |||
Mark Nottingham and Erik Wilde, authors of RFC 7807. Klaus Hartke | The authors would like to thank Mark Nottingham and Erik Wilde, the | |||
and Jaime Jiménez, co-authors of an earlier generation of this | authors of RFC 7807; Klaus Hartke and Jaime Jiménez, the coauthors of | |||
specification. Christian Amsüss, Marco Tiloca, Ari Keränen and | an earlier draft version of this specification; Christian Amsüss, | |||
Michael Richardson for review and comments on this document. | Marco Tiloca, Ari Keränen, and Michael Richardson for review and | |||
Francesca Palombini for her review (and support) as responsible AD, | comments on this document. Francesca Palombini for her review (and | |||
and Joel Jaeggli for his OPSDIR review, both of which brought | support) as responsible AD, and Joel Jaeggli for his OPSDIR review, | |||
significant additional considerations to this document. | both of which brought significant additional considerations to this | |||
document. | ||||
For Appendix A, John Cowan and Doug Ewell are also to be | For Appendix A, John Cowan and Doug Ewell are also to be | |||
acknowledged. The content of an earlier version of this appendix was | acknowledged. The content of an earlier draft version of this | |||
also discussed in the "apps-discuss at ietf.org" and "ltru at | appendix was also discussed in the "apps-discuss@ietf.org" and | |||
ietf.org" mailing lists. More recently, the authors initiated a | "ltru@ietf.org" mailing lists. More recently, the authors initiated | |||
discussion about the handling of writing direction information in | a discussion about the handling of writing direction information in | |||
conjunction with language tags. That led to discussions within the | conjunction with language tags. That led to discussions within the | |||
W3C Internationalization Core Working Group. The authors would like | W3C Internationalization Core Working Group. The authors would like | |||
to acknowledge that cross-organization cooperation and particular | to acknowledge that cross-organization cooperation and particular | |||
contributions from John Klensin and Addison Phillips, and specific | contributions from John Klensin and Addison Phillips and specific | |||
text proposals by Martin Dürst. | text proposals by Martin Dürst. | |||
Contributors | Contributors | |||
Peter Occil | Peter Occil | |||
Email: poccil14 at gmail dot com | Email: poccil14@gmail.com | |||
URI: http://peteroupc.github.io/CBOR/ | URI: http://peteroupc.github.io/CBOR/ | |||
Peter defined CBOR tag 38, basis of Appendix A. | Peter defined CBOR tag 38, basis of Appendix A. | |||
Christian Amsüss | Christian Amsüss | |||
Email: christian@amsuess.com | Email: christian@amsuess.com | |||
Christian contributed what became Section 3.1.1. | Christian contributed what became Section 3.1.1. | |||
Authors' Addresses | Authors' Addresses | |||
Thomas Fossati | Thomas Fossati | |||
arm | Arm Limited | |||
Email: thomas.fossati@arm.com | Email: thomas.fossati@arm.com | |||
Carsten Bormann | Carsten Bormann | |||
Universität Bremen TZI | Universität Bremen TZI | |||
Postfach 330440 | Postfach 330440 | |||
D-28359 Bremen | D-28359 Bremen | |||
Germany | Germany | |||
Phone: +49-421-218-63921 | Phone: +49-421-218-63921 | |||
Email: cabo@tzi.org | Email: cabo@tzi.org | |||
End of changes. 130 change blocks. | ||||
442 lines changed or deleted | 447 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |