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.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/