| draft-ietf-httpbis-header-structure-17.txt | draft-ietf-httpbis-header-structure-18.txt | |||
|---|---|---|---|---|
| HTTP M. Nottingham | HTTP M. Nottingham | |||
| Internet-Draft Fastly | Internet-Draft Fastly | |||
| Intended status: Standards Track P-H. Kamp | Intended status: Standards Track P-H. Kamp | |||
| Expires: September 16, 2020 The Varnish Cache Project | Expires: October 21, 2020 The Varnish Cache Project | |||
| March 15, 2020 | April 19, 2020 | |||
| Structured Field Values for HTTP | Structured Field Values for HTTP | |||
| draft-ietf-httpbis-header-structure-17 | draft-ietf-httpbis-header-structure-18 | |||
| Abstract | Abstract | |||
| This document describes a set of data types and associated algorithms | This document describes a set of data types and associated algorithms | |||
| that are intended to make it easier and safer to define and handle | that are intended to make it easier and safer to define and handle | |||
| HTTP header and trailer fields, known as "Structured Fields", or | HTTP header and trailer fields, known as "Structured Fields", | |||
| "Structured Headers". It is intended for use by specifications of | "Structured Headers", or "Structured Trailers". It is intended for | |||
| new HTTP fields that wish to use a common syntax that is more | use by specifications of new HTTP fields that wish to use a common | |||
| restrictive than traditional HTTP field values. | syntax that is more restrictive than traditional HTTP field values. | |||
| Note to Readers | Note to Readers | |||
| _RFC EDITOR: please remove this section before publication_ | _RFC EDITOR: please remove this section before publication_ | |||
| Discussion of this draft takes place on the HTTP working group | Discussion of this draft takes place on the HTTP working group | |||
| mailing list (ietf-http-wg@w3.org), which is archived at | mailing list (ietf-http-wg@w3.org), which is archived at | |||
| https://lists.w3.org/Archives/Public/ietf-http-wg/ [1]. | https://lists.w3.org/Archives/Public/ietf-http-wg/ [1]. | |||
| Working Group information can be found at https://httpwg.github.io/ | Working Group information can be found at https://httpwg.github.io/ | |||
| skipping to change at page 2, line 10 ¶ | skipping to change at page 2, line 10 ¶ | |||
| 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 https://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 September 16, 2020. | This Internet-Draft will expire on October 21, 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 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 | |||
| (https://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 | |||
| skipping to change at page 3, line 26 ¶ | skipping to change at page 3, line 26 ¶ | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 32 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 32 | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . 32 | 7.1. Normative References . . . . . . . . . . . . . . . . . . 32 | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . 33 | 7.2. Informative References . . . . . . . . . . . . . . . . . 33 | |||
| 7.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | 7.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| Appendix A. Frequently Asked Questions . . . . . . . . . . . . . 34 | Appendix A. Frequently Asked Questions . . . . . . . . . . . . . 34 | |||
| A.1. Why not JSON? . . . . . . . . . . . . . . . . . . . . . . 34 | A.1. Why not JSON? . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| Appendix B. Implementation Notes . . . . . . . . . . . . . . . . 35 | Appendix B. Implementation Notes . . . . . . . . . . . . . . . . 35 | |||
| Appendix C. Changes . . . . . . . . . . . . . . . . . . . . . . 35 | Appendix C. Changes . . . . . . . . . . . . . . . . . . . . . . 35 | |||
| C.1. Since draft-ietf-httpbis-header-structure-15 . . . . . . 36 | C.1. Since draft-ietf-httpbis-header-structure-17 . . . . . . 36 | |||
| C.2. Since draft-ietf-httpbis-header-structure-14 . . . . . . 36 | C.2. Since draft-ietf-httpbis-header-structure-16 . . . . . . 36 | |||
| C.3. Since draft-ietf-httpbis-header-structure-13 . . . . . . 37 | C.3. Since draft-ietf-httpbis-header-structure-15 . . . . . . 36 | |||
| C.4. Since draft-ietf-httpbis-header-structure-12 . . . . . . 37 | C.4. Since draft-ietf-httpbis-header-structure-14 . . . . . . 36 | |||
| C.5. Since draft-ietf-httpbis-header-structure-11 . . . . . . 37 | C.5. Since draft-ietf-httpbis-header-structure-13 . . . . . . 37 | |||
| C.6. Since draft-ietf-httpbis-header-structure-10 . . . . . . 37 | C.6. Since draft-ietf-httpbis-header-structure-12 . . . . . . 37 | |||
| C.7. Since draft-ietf-httpbis-header-structure-09 . . . . . . 38 | C.7. Since draft-ietf-httpbis-header-structure-11 . . . . . . 37 | |||
| C.8. Since draft-ietf-httpbis-header-structure-08 . . . . . . 38 | C.8. Since draft-ietf-httpbis-header-structure-10 . . . . . . 37 | |||
| C.9. Since draft-ietf-httpbis-header-structure-07 . . . . . . 38 | C.9. Since draft-ietf-httpbis-header-structure-09 . . . . . . 38 | |||
| C.10. Since draft-ietf-httpbis-header-structure-06 . . . . . . 39 | C.10. Since draft-ietf-httpbis-header-structure-08 . . . . . . 38 | |||
| C.11. Since draft-ietf-httpbis-header-structure-05 . . . . . . 39 | C.11. Since draft-ietf-httpbis-header-structure-07 . . . . . . 39 | |||
| C.12. Since draft-ietf-httpbis-header-structure-04 . . . . . . 39 | C.12. Since draft-ietf-httpbis-header-structure-06 . . . . . . 39 | |||
| C.13. Since draft-ietf-httpbis-header-structure-03 . . . . . . 39 | C.13. Since draft-ietf-httpbis-header-structure-05 . . . . . . 39 | |||
| C.14. Since draft-ietf-httpbis-header-structure-02 . . . . . . 39 | C.14. Since draft-ietf-httpbis-header-structure-04 . . . . . . 39 | |||
| C.15. Since draft-ietf-httpbis-header-structure-01 . . . . . . 40 | C.15. Since draft-ietf-httpbis-header-structure-03 . . . . . . 40 | |||
| C.16. Since draft-ietf-httpbis-header-structure-00 . . . . . . 40 | C.16. Since draft-ietf-httpbis-header-structure-02 . . . . . . 40 | |||
| C.17. Since draft-ietf-httpbis-header-structure-01 . . . . . . 40 | ||||
| C.18. Since draft-ietf-httpbis-header-structure-00 . . . . . . 40 | ||||
| Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 40 | Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 40 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
| 1. Introduction | 1. Introduction | |||
| Specifying the syntax of new HTTP header (and trailer) fields is an | Specifying the syntax of new HTTP header (and trailer) fields is an | |||
| onerous task; even with the guidance in Section 8.3.1 of [RFC7231], | onerous task; even with the guidance in Section 8.3.1 of [RFC7231], | |||
| there are many decisions - and pitfalls - for a prospective HTTP | there are many decisions - and pitfalls - for a prospective HTTP | |||
| field author. | field author. | |||
| Once a field is defined, bespoke parsers and serializers often need | Once a field is defined, bespoke parsers and serializers often need | |||
| to be written, because each field value has slightly different | to be written, because each field value has slightly different | |||
| handling of what looks like common syntax. | handling of what looks like common syntax. | |||
| This document introduces a set of common data structures for use in | This document introduces a set of common data structures for use in | |||
| definitions of new HTTP field values to address these problems. In | definitions of new HTTP field values to address these problems. In | |||
| particular, it defines a generic, abstract model for them, along with | particular, it defines a generic, abstract model for them, along with | |||
| a concrete serialization for expressing that model in HTTP [RFC7230] | a concrete serialization for expressing that model in HTTP [RFC7230] | |||
| header and trailer fields. | header and trailer fields. | |||
| A HTTP field that is defined as a "Structured Header" (or "Structured | A HTTP field that is defined as a "Structured Header" or "Structured | |||
| Trailer", respectively; if the field can be either, it is a | Trailer" (if the field can be either, it is a "Structured Field") | |||
| "Structured Field") uses the types defined in this specification to | uses the types defined in this specification to define its syntax and | |||
| define its syntax and basic handling rules, thereby simplifying both | basic handling rules, thereby simplifying both its definition by | |||
| its definition by specification writers and handling by | specification writers and handling by implementations. | |||
| implementations. | ||||
| Additionally, future versions of HTTP can define alternative | Additionally, future versions of HTTP can define alternative | |||
| serializations of the abstract model of these structures, allowing | serializations of the abstract model of these structures, allowing | |||
| fields that use it to be transmitted more efficiently without being | fields that use that model to be transmitted more efficiently without | |||
| redefined. | being redefined. | |||
| Note that it is not a goal of this document to redefine the syntax of | Note that it is not a goal of this document to redefine the syntax of | |||
| existing HTTP fields; the mechanisms described herein are only | existing HTTP fields; the mechanisms described herein are only | |||
| intended to be used with those that explicitly opt into them. | intended to be used with those that explicitly opt into them. | |||
| Section 2 describes how to specify a Structured Field. | Section 2 describes how to specify a Structured Field. | |||
| Section 3 defines a number of abstract data types that can be used in | Section 3 defines a number of abstract data types that can be used in | |||
| Structured Fields. | Structured Fields. | |||
| skipping to change at page 5, line 49 ¶ | skipping to change at page 6, line 4 ¶ | |||
| 2. Defining New Structured Fields | 2. Defining New Structured Fields | |||
| To specify a HTTP field as a Structured Field, its authors needs to: | To specify a HTTP field as a Structured Field, its authors needs to: | |||
| o Reference this specification. Recipients and generators of the | o Reference this specification. Recipients and generators of the | |||
| field need to know that the requirements of this document are in | field need to know that the requirements of this document are in | |||
| effect. | effect. | |||
| o Identify whether the field is a Structured Header (i.e., it can | o Identify whether the field is a Structured Header (i.e., it can | |||
| only be used in the header section - the common case), a | only be used in the header section - the common case), a | |||
| Structured Field (only in the trailer section), or a Structured | Structured Trailer (only in the trailer section), or a Structured | |||
| Field (both). | Field (both). | |||
| o Specify the type of the field value; either List (Section 3.1), | o Specify the type of the field value; either List (Section 3.1), | |||
| Dictionary (Section 3.2), or Item (Section 3.3). | Dictionary (Section 3.2), or Item (Section 3.3). | |||
| o Define the semantics of those structures. | o Define the semantics of those structures. | |||
| o Specify any additional constraints upon the structures used, as | o Specify any additional constraints upon the structures used, as | |||
| well as the consequences when those constraints are violated. | well as the consequences when those constraints are violated. | |||
| skipping to change at page 8, line 5 ¶ | skipping to change at page 8, line 5 ¶ | |||
| name", "structured trailer name" or "structured field name" as | name", "structured trailer name" or "structured field name" as | |||
| appropriate. Likewise, they can refer its field value as a | appropriate. Likewise, they can refer its field value as a | |||
| "structured header value", "structured trailer value" or "structured | "structured header value", "structured trailer value" or "structured | |||
| field value" as necessary. Field definitions are encouraged to use | field value" as necessary. Field definitions are encouraged to use | |||
| the ABNF rules beginning with "sh-" defined in this specification; | the ABNF rules beginning with "sh-" defined in this specification; | |||
| other rules in this specification are not intended for their use. | other rules in this specification are not intended for their use. | |||
| For example, a fictitious Foo-Example header field might be specified | For example, a fictitious Foo-Example header field might be specified | |||
| as: | as: | |||
| --8<-- | ||||
| 42. Foo-Example Header | 42. Foo-Example Header | |||
| The Foo-Example HTTP header field conveys information about how | The Foo-Example HTTP header field conveys information about how | |||
| much Foo the message has. | much Foo the message has. | |||
| Foo-Example is a Item Structured Header [RFCxxxx]. Its value MUST be | Foo-Example is a Item Structured Header [RFCxxxx]. Its value MUST be | |||
| an Integer (Section Y.Y of [RFCxxxx]). Its ABNF is: | an Integer (Section Y.Y of [RFCxxxx]). Its ABNF is: | |||
| Foo-Example = sh-integer | Foo-Example = sh-integer | |||
| skipping to change at page 8, line 33 ¶ | skipping to change at page 8, line 34 ¶ | |||
| "foourl" contains a URI-reference (Section 4.1 of [RFC3986]). If | "foourl" contains a URI-reference (Section 4.1 of [RFC3986]). If | |||
| its value is not a valid URI-reference, the entire header field | its value is not a valid URI-reference, the entire header field | |||
| MUST be ignored. If its value is a relative reference (Section 4.2 | MUST be ignored. If its value is a relative reference (Section 4.2 | |||
| of [RFC3986]), it MUST be resolved (Section 5 of [RFC3986]) before | of [RFC3986]), it MUST be resolved (Section 5 of [RFC3986]) before | |||
| being used. | being used. | |||
| For example: | For example: | |||
| Foo-Example: 2; foourl="https://foo.example.com/" | Foo-Example: 2; foourl="https://foo.example.com/" | |||
| -->8-- | ||||
| 3. Structured Data Types | 3. Structured Data Types | |||
| This section defines the abstract value types that can be composed | This section defines the abstract value types that can be composed | |||
| into Structured Fields. The ABNF provided represents the on-wire | into Structured Fields. The ABNF provided represents the on-wire | |||
| format in HTTP field values. | format in HTTP field values. | |||
| In summary: | In summary: | |||
| o There are three top-level types that a HTTP field can be defined | o There are three top-level types that a HTTP field can be defined | |||
| as; Lists, Dictionaries, and Items. | as: Lists, Dictionaries, and Items. | |||
| o Lists and Dictionaries are containers; their members can be Items | o Lists and Dictionaries are containers; their members can be Items | |||
| or Inner Lists (which are themselves lists of items). | or Inner Lists (which are themselves arrays of Items). | |||
| o Both Items and Inner Lists can be parameterized with key/value | o Both Items and Inner Lists can be parameterized with key/value | |||
| pairs. | pairs. | |||
| 3.1. Lists | 3.1. Lists | |||
| Lists are arrays of zero or more members, each of which can be an | Lists are arrays of zero or more members, each of which can be an | |||
| Item (Section 3.3) or an Inner List (Section 3.1.1), both of which | Item (Section 3.3) or an Inner List (Section 3.1.1), both of which | |||
| can be Parameterized (Section 3.1.2). | can be Parameterized (Section 3.1.2). | |||
| skipping to change at page 10, line 7 ¶ | skipping to change at page 10, line 7 ¶ | |||
| the individual Items and the Inner List itself can be Parameterized | the individual Items and the Inner List itself can be Parameterized | |||
| (Section 3.1.2). | (Section 3.1.2). | |||
| The ABNF for Inner Lists is: | The ABNF for Inner Lists is: | |||
| inner-list = "(" *SP [ sh-item *( 1*SP sh-item ) *SP ] ")" | inner-list = "(" *SP [ sh-item *( 1*SP sh-item ) *SP ] ")" | |||
| parameters | parameters | |||
| Inner Lists are denoted by surrounding parenthesis, and have their | Inner Lists are denoted by surrounding parenthesis, and have their | |||
| values delimited by a single space. A field whose value is defined | values delimited by a single space. A field whose value is defined | |||
| as a list of Inner Lists of Strings could look like: | as a List of Inner Lists of Strings could look like: | |||
| Example-StrListListHeader: ("foo" "bar"), ("baz"), ("bat" "one"), () | Example-StrListListHeader: ("foo" "bar"), ("baz"), ("bat" "one"), () | |||
| Note that the last member in this example is an empty Inner List. | Note that the last member in this example is an empty Inner List. | |||
| A header field whose value is defined as a list of Inner Lists with | A header field whose value is defined as a List of Inner Lists with | |||
| Parameters at both levels could look like: | Parameters at both levels could look like: | |||
| Example-ListListParam: ("foo"; a=1;b=2);lvl=5, ("bar" "baz");lvl=1 | Example-ListListParam: ("foo"; a=1;b=2);lvl=5, ("bar" "baz");lvl=1 | |||
| Parsers MUST support Inner Lists containing at least 256 members. | Parsers MUST support Inner Lists containing at least 256 members. | |||
| Field specifications can constrain the types and cardinality of | Field specifications can constrain the types and cardinality of | |||
| individual Inner List members as they require. | individual Inner List members as they require. | |||
| 3.1.2. Parameters | 3.1.2. Parameters | |||
| skipping to change at page 14, line 41 ¶ | skipping to change at page 14, line 41 ¶ | |||
| Tokens are short textual words; their abstract model is identical to | Tokens are short textual words; their abstract model is identical to | |||
| their expression in the HTTP field value serialization. | their expression in the HTTP field value serialization. | |||
| The ABNF for Tokens is: | The ABNF for Tokens is: | |||
| sh-token = ( ALPHA / "*" ) *( tchar / ":" / "/" ) | sh-token = ( ALPHA / "*" ) *( tchar / ":" / "/" ) | |||
| Parsers MUST support Tokens with at least 512 characters. | Parsers MUST support Tokens with at least 512 characters. | |||
| Note that Token allows the characters as the "token" ABNF rule | Note that Token allows the same characters as the "token" ABNF rule | |||
| defined in [RFC7230], with the exceptions that the first character is | defined in [RFC7230], with the exceptions that the first character is | |||
| required to be either ALPHA or "*", and ":" and "/" are also allowed | required to be either ALPHA or "*", and ":" and "/" are also allowed | |||
| in subsequent characters. | in subsequent characters. | |||
| 3.3.5. Byte Sequences | 3.3.5. Byte Sequences | |||
| Byte Sequences can be conveyed in Structured Fields. | Byte Sequences can be conveyed in Structured Fields. | |||
| The ABNF for a Byte Sequence is: | The ABNF for a Byte Sequence is: | |||
| skipping to change at page 36, line 5 ¶ | skipping to change at page 36, line 5 ¶ | |||
| The serialization algorithm is defined in a way that it is not | The serialization algorithm is defined in a way that it is not | |||
| strictly limited to the data types defined in Section 3 in every | strictly limited to the data types defined in Section 3 in every | |||
| case. For example, Decimals are designed to take broader input and | case. For example, Decimals are designed to take broader input and | |||
| round to allowed values. | round to allowed values. | |||
| Appendix C. Changes | Appendix C. Changes | |||
| _RFC Editor: Please remove this section before publication._ | _RFC Editor: Please remove this section before publication._ | |||
| C.1. Since draft-ietf-httpbis-header-structure-15 | C.1. Since draft-ietf-httpbis-header-structure-17 | |||
| o Editorial improvements. | ||||
| C.2. Since draft-ietf-httpbis-header-structure-16 | ||||
| o Editorial improvements. | ||||
| o Discussion on forwards compatibility. | ||||
| C.3. Since draft-ietf-httpbis-header-structure-15 | ||||
| o Editorial improvements. | o Editorial improvements. | |||
| o Use HTTP field terminology more consistently, in line with recent | o Use HTTP field terminology more consistently, in line with recent | |||
| changes to HTTP-core. | changes to HTTP-core. | |||
| o String length requirements apply to decoded strings (#1051). | o String length requirements apply to decoded strings (#1051). | |||
| o Correctly round decimals in serialisation (#1043). | o Correctly round decimals in serialisation (#1043). | |||
| o Clarify input to serialisation algorithms (#1055). | o Clarify input to serialisation algorithms (#1055). | |||
| o Omitted True dictionary value can have parameters (#1083). | o Omitted True dictionary value can have parameters (#1083). | |||
| o Keys can now start with '*' (#1068). | o Keys can now start with '*' (#1068). | |||
| C.2. Since draft-ietf-httpbis-header-structure-14 | C.4. Since draft-ietf-httpbis-header-structure-14 | |||
| o Editorial improvements. | o Editorial improvements. | |||
| o Allow empty dictionary values (#992). | o Allow empty dictionary values (#992). | |||
| o Change value of omitted parameter value to True (#995). | o Change value of omitted parameter value to True (#995). | |||
| o Explain more about splitting dictionaries and lists across header | o Explain more about splitting dictionaries and lists across header | |||
| instances (#997). | instances (#997). | |||
| skipping to change at page 37, line 5 ¶ | skipping to change at page 37, line 14 ¶ | |||
| o Handle duplicate dictionary and parameter keys by overwriting | o Handle duplicate dictionary and parameter keys by overwriting | |||
| their values, rather than failing (#997). | their values, rather than failing (#997). | |||
| o Allow "." in key (#1027). | o Allow "." in key (#1027). | |||
| o Check first character of key in serialisation (#1037). | o Check first character of key in serialisation (#1037). | |||
| o Talk about greasing headers (#1015). | o Talk about greasing headers (#1015). | |||
| C.3. Since draft-ietf-httpbis-header-structure-13 | C.5. Since draft-ietf-httpbis-header-structure-13 | |||
| o Editorial improvements. | o Editorial improvements. | |||
| o Define "structured header name" and "structured header value" | o Define "structured header name" and "structured header value" | |||
| terms (#908). | terms (#908). | |||
| o Corrected text about valid characters in strings (#931). | o Corrected text about valid characters in strings (#931). | |||
| o Removed most instances of the word "textual", as it was redundant | o Removed most instances of the word "textual", as it was redundant | |||
| (#915). | (#915). | |||
| o Allowed parameters on Items and Inner Lists (#907). | o Allowed parameters on Items and Inner Lists (#907). | |||
| o Expand the range of characters in token (#961). | o Expand the range of characters in token (#961). | |||
| o Disallow OWS before ";" delimiter in parameters (#961). | o Disallow OWS before ";" delimiter in parameters (#961). | |||
| C.4. Since draft-ietf-httpbis-header-structure-12 | C.6. Since draft-ietf-httpbis-header-structure-12 | |||
| o Editorial improvements. | o Editorial improvements. | |||
| o Reworked float serialisation (#896). | o Reworked float serialisation (#896). | |||
| o Don't add a trailing space in inner-list (#904). | o Don't add a trailing space in inner-list (#904). | |||
| C.5. Since draft-ietf-httpbis-header-structure-11 | C.7. Since draft-ietf-httpbis-header-structure-11 | |||
| o Allow * in key (#844). | o Allow * in key (#844). | |||
| o Constrain floats to six digits of precision (#848). | o Constrain floats to six digits of precision (#848). | |||
| o Allow dictionary members to have parameters (#842). | o Allow dictionary members to have parameters (#842). | |||
| C.6. Since draft-ietf-httpbis-header-structure-10 | C.8. Since draft-ietf-httpbis-header-structure-10 | |||
| o Update abstract (#799). | o Update abstract (#799). | |||
| o Input and output are now arrays of bytes (#662). | o Input and output are now arrays of bytes (#662). | |||
| o Implementations need to preserve difference between token and | o Implementations need to preserve difference between token and | |||
| string (#790). | string (#790). | |||
| o Allow empty dictionaries and lists (#781). | o Allow empty dictionaries and lists (#781). | |||
| o Change parameterized lists to have primary items (#797). | o Change parameterized lists to have primary items (#797). | |||
| o Allow inner lists in both dictionaries and lists; removes lists of | o Allow inner lists in both dictionaries and lists; removes lists of | |||
| lists (#816). | lists (#816). | |||
| o Subsume Parameterised Lists into Lists (#839). | o Subsume Parameterised Lists into Lists (#839). | |||
| C.7. Since draft-ietf-httpbis-header-structure-09 | C.9. Since draft-ietf-httpbis-header-structure-09 | |||
| o Changed Boolean from T/F to 1/0 (#784). | o Changed Boolean from T/F to 1/0 (#784). | |||
| o Parameters are now ordered maps (#765). | o Parameters are now ordered maps (#765). | |||
| o Clamp integers to 15 digits (#737). | o Clamp integers to 15 digits (#737). | |||
| C.8. Since draft-ietf-httpbis-header-structure-08 | C.10. Since draft-ietf-httpbis-header-structure-08 | |||
| o Disallow whitespace before items properly (#703). | o Disallow whitespace before items properly (#703). | |||
| o Created "key" for use in dictionaries and parameters, rather than | o Created "key" for use in dictionaries and parameters, rather than | |||
| relying on identifier (#702). Identifiers have a separate minimum | relying on identifier (#702). Identifiers have a separate minimum | |||
| supported size. | supported size. | |||
| o Expanded the range of special characters allowed in identifier to | o Expanded the range of special characters allowed in identifier to | |||
| include all of ALPHA, ".", ":", and "%" (#702). | include all of ALPHA, ".", ":", and "%" (#702). | |||
| skipping to change at page 38, line 42 ¶ | skipping to change at page 39, line 5 ¶ | |||
| o Gave better names for referring specs to use in Parameterised | o Gave better names for referring specs to use in Parameterised | |||
| Lists (#720). | Lists (#720). | |||
| o Added Lists of Lists (#721). | o Added Lists of Lists (#721). | |||
| o Rename Identifier to Token (#725). | o Rename Identifier to Token (#725). | |||
| o Add implementation guidance (#727). | o Add implementation guidance (#727). | |||
| C.9. Since draft-ietf-httpbis-header-structure-07 | C.11. Since draft-ietf-httpbis-header-structure-07 | |||
| o Make Dictionaries ordered mappings (#659). | o Make Dictionaries ordered mappings (#659). | |||
| o Changed "binary content" to "byte sequence" to align with Infra | o Changed "binary content" to "byte sequence" to align with Infra | |||
| specification (#671). | specification (#671). | |||
| o Changed "mapping" to "map" for #671. | o Changed "mapping" to "map" for #671. | |||
| o Don't fail if byte sequences aren't "=" padded (#658). | o Don't fail if byte sequences aren't "=" padded (#658). | |||
| o Add Booleans (#683). | o Add Booleans (#683). | |||
| o Allow identifiers in items again (#629). | o Allow identifiers in items again (#629). | |||
| o Disallowed whitespace before items (#703). | o Disallowed whitespace before items (#703). | |||
| o Explain the consequences of splitting a string across multiple | o Explain the consequences of splitting a string across multiple | |||
| headers (#686). | headers (#686). | |||
| C.10. Since draft-ietf-httpbis-header-structure-06 | C.12. Since draft-ietf-httpbis-header-structure-06 | |||
| o Add a FAQ. | o Add a FAQ. | |||
| o Allow non-zero pad bits. | o Allow non-zero pad bits. | |||
| o Explicitly check for integers that violate constraints. | o Explicitly check for integers that violate constraints. | |||
| C.11. Since draft-ietf-httpbis-header-structure-05 | C.13. Since draft-ietf-httpbis-header-structure-05 | |||
| o Reorganise specification to separate parsing out. | o Reorganise specification to separate parsing out. | |||
| o Allow referencing specs to use ABNF. | o Allow referencing specs to use ABNF. | |||
| o Define serialisation algorithms. | o Define serialisation algorithms. | |||
| o Refine relationship between ABNF, parsing and serialisation | o Refine relationship between ABNF, parsing and serialisation | |||
| algorithms. | algorithms. | |||
| C.12. Since draft-ietf-httpbis-header-structure-04 | C.14. Since draft-ietf-httpbis-header-structure-04 | |||
| o Remove identifiers from item. | o Remove identifiers from item. | |||
| o Remove most limits on sizes. | o Remove most limits on sizes. | |||
| o Refine number parsing. | o Refine number parsing. | |||
| C.13. Since draft-ietf-httpbis-header-structure-03 | C.15. Since draft-ietf-httpbis-header-structure-03 | |||
| o Strengthen language around failure handling. | o Strengthen language around failure handling. | |||
| C.14. Since draft-ietf-httpbis-header-structure-02 | C.16. Since draft-ietf-httpbis-header-structure-02 | |||
| o Split Numbers into Integers and Floats. | o Split Numbers into Integers and Floats. | |||
| o Define number parsing. | o Define number parsing. | |||
| o Tighten up binary parsing and give it an explicit end delimiter. | o Tighten up binary parsing and give it an explicit end delimiter. | |||
| o Clarify that mappings are unordered. | o Clarify that mappings are unordered. | |||
| o Allow zero-length strings. | o Allow zero-length strings. | |||
| o Improve string parsing algorithm. | o Improve string parsing algorithm. | |||
| o Improve limits in algorithms. | o Improve limits in algorithms. | |||
| o Require parsers to combine header fields before processing. | o Require parsers to combine header fields before processing. | |||
| o Throw an error on trailing garbage. | o Throw an error on trailing garbage. | |||
| C.15. Since draft-ietf-httpbis-header-structure-01 | C.17. Since draft-ietf-httpbis-header-structure-01 | |||
| o Replaced with draft-nottingham-structured-headers. | o Replaced with draft-nottingham-structured-headers. | |||
| C.16. Since draft-ietf-httpbis-header-structure-00 | C.18. Since draft-ietf-httpbis-header-structure-00 | |||
| o Added signed 64bit integer type. | o Added signed 64bit integer type. | |||
| o Drop UTF8, and settle on BCP137 ::EmbeddedUnicodeChar for h1- | o Drop UTF8, and settle on BCP137 ::EmbeddedUnicodeChar for h1- | |||
| unicode-string. | unicode-string. | |||
| o Change h1_blob delimiter to ":" since "'" is valid t_char | o Change h1_blob delimiter to ":" since "'" is valid t_char | |||
| Acknowledgements | Acknowledgements | |||
| End of changes. 32 change blocks. | ||||
| 55 lines changed or deleted | 68 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||