draft-ietf-quic-qpack-13.txt   draft-ietf-quic-qpack-14.txt 
QUIC C. Krasic QUIC C. Krasic
Internet-Draft Netflix Internet-Draft Netflix
Intended status: Standards Track M. Bishop Intended status: Standards Track M. Bishop
Expires: 24 August 2020 Akamai Technologies Expires: 24 August 2020 Akamai Technologies
A. Frindell, Ed. A. Frindell, Ed.
Facebook Facebook
21 February 2020 21 February 2020
QPACK: Header Compression for HTTP/3 QPACK: Header Compression for HTTP/3
draft-ietf-quic-qpack-13 draft-ietf-quic-qpack-14
Abstract Abstract
This specification defines QPACK, a compression format for This specification defines QPACK, a compression format for
efficiently representing HTTP header fields, to be used in HTTP/3. efficiently representing HTTP header fields, to be used in HTTP/3.
This is a variation of HPACK header compression that seeks to reduce This is a variation of HPACK header compression that seeks to reduce
head-of-line blocking. head-of-line blocking.
Note to Readers Note to Readers
skipping to change at page 3, line 29 skipping to change at page 3, line 29
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27
8.1. Settings Registration . . . . . . . . . . . . . . . . . . 27 8.1. Settings Registration . . . . . . . . . . . . . . . . . . 27
8.2. Stream Type Registration . . . . . . . . . . . . . . . . 27 8.2. Stream Type Registration . . . . . . . . . . . . . . . . 27
8.3. Error Code Registration . . . . . . . . . . . . . . . . . 27 8.3. Error Code Registration . . . . . . . . . . . . . . . . . 27
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 28
9.1. Normative References . . . . . . . . . . . . . . . . . . 28 9.1. Normative References . . . . . . . . . . . . . . . . . . 28
9.2. Informative References . . . . . . . . . . . . . . . . . 28 9.2. Informative References . . . . . . . . . . . . . . . . . 28
Appendix A. Static Table . . . . . . . . . . . . . . . . . . . . 29 Appendix A. Static Table . . . . . . . . . . . . . . . . . . . . 29
Appendix B. Sample One Pass Encoding Algorithm . . . . . . . . . 33 Appendix B. Sample One Pass Encoding Algorithm . . . . . . . . . 33
Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 34 Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 34
C.1. Since draft-ietf-quic-qpack-12 . . . . . . . . . . . . . 35 C.1. Since draft-ietf-quic-qpack-13 . . . . . . . . . . . . . 35
C.2. Since draft-ietf-quic-qpack-11 . . . . . . . . . . . . . 35 C.2. Since draft-ietf-quic-qpack-12 . . . . . . . . . . . . . 35
C.3. Since draft-ietf-quic-qpack-10 . . . . . . . . . . . . . 35 C.3. Since draft-ietf-quic-qpack-11 . . . . . . . . . . . . . 35
C.4. Since draft-ietf-quic-qpack-09 . . . . . . . . . . . . . 35 C.4. Since draft-ietf-quic-qpack-10 . . . . . . . . . . . . . 35
C.5. Since draft-ietf-quic-qpack-08 . . . . . . . . . . . . . 35 C.5. Since draft-ietf-quic-qpack-09 . . . . . . . . . . . . . 35
C.6. Since draft-ietf-quic-qpack-06 . . . . . . . . . . . . . 35 C.6. Since draft-ietf-quic-qpack-08 . . . . . . . . . . . . . 35
C.7. Since draft-ietf-quic-qpack-05 . . . . . . . . . . . . . 35 C.7. Since draft-ietf-quic-qpack-06 . . . . . . . . . . . . . 35
C.8. Since draft-ietf-quic-qpack-04 . . . . . . . . . . . . . 35 C.8. Since draft-ietf-quic-qpack-05 . . . . . . . . . . . . . 35
C.9. Since draft-ietf-quic-qpack-03 . . . . . . . . . . . . . 36 C.9. Since draft-ietf-quic-qpack-04 . . . . . . . . . . . . . 36
C.10. Since draft-ietf-quic-qpack-02 . . . . . . . . . . . . . 36 C.10. Since draft-ietf-quic-qpack-03 . . . . . . . . . . . . . 36
C.11. Since draft-ietf-quic-qpack-01 . . . . . . . . . . . . . 36 C.11. Since draft-ietf-quic-qpack-02 . . . . . . . . . . . . . 36
C.12. Since draft-ietf-quic-qpack-00 . . . . . . . . . . . . . 36 C.12. Since draft-ietf-quic-qpack-01 . . . . . . . . . . . . . 36
C.13. Since draft-ietf-quic-qcram-00 . . . . . . . . . . . . . 37 C.13. Since draft-ietf-quic-qpack-00 . . . . . . . . . . . . . 36
C.14. Since draft-ietf-quic-qcram-00 . . . . . . . . . . . . . 37
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 37 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 37
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 37 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 37
1. Introduction 1. Introduction
The QUIC transport protocol [QUIC-TRANSPORT] is designed to support The QUIC transport protocol [QUIC-TRANSPORT] is designed to support
HTTP semantics, and its design subsumes many of the features of HTTP semantics, and its design subsumes many of the features of
HTTP/2 [RFC7540]. HTTP/2 uses HPACK [RFC7541] for header HTTP/2 [RFC7540]. HTTP/2 uses HPACK [RFC7541] for header
compression. If HPACK were used for HTTP/3 [HTTP3], it would induce compression. If HPACK were used for HTTP/3 [HTTP3], it would induce
head-of-line blocking due to built-in assumptions of a total ordering head-of-line blocking due to built-in assumptions of a total ordering
skipping to change at page 28, line 27 skipping to change at page 28, line 27
+----------------------------+------+---------------+---------------+ +----------------------------+------+---------------+---------------+
Table 3 Table 3
9. References 9. References
9.1. Normative References 9.1. Normative References
[HTTP3] Bishop, M., Ed., "Hypertext Transfer Protocol Version 3 [HTTP3] Bishop, M., Ed., "Hypertext Transfer Protocol Version 3
(HTTP/3)", Work in Progress, Internet-Draft, draft-ietf- (HTTP/3)", Work in Progress, Internet-Draft, draft-ietf-
quic-http-26, 21 February 2020, quic-http-27, 21 February 2020,
<https://tools.ietf.org/html/draft-ietf-quic-http-26>. <https://tools.ietf.org/html/draft-ietf-quic-http-27>.
[QUIC-TRANSPORT] [QUIC-TRANSPORT]
Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
Multiplexed and Secure Transport", Work in Progress, Multiplexed and Secure Transport", Work in Progress,
Internet-Draft, draft-ietf-quic-transport-26, 21 February Internet-Draft, draft-ietf-quic-transport-27, 21 February
2020, <https://tools.ietf.org/html/draft-ietf-quic- 2020, <https://tools.ietf.org/html/draft-ietf-quic-
transport-26>. transport-27>.
[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>.
[RFC7541] Peon, R. and H. Ruellan, "HPACK: Header Compression for [RFC7541] Peon, R. and H. Ruellan, "HPACK: Header Compression for
HTTP/2", RFC 7541, DOI 10.17487/RFC7541, May 2015, HTTP/2", RFC 7541, DOI 10.17487/RFC7541, May 2015,
<https://www.rfc-editor.org/info/rfc7541>. <https://www.rfc-editor.org/info/rfc7541>.
skipping to change at page 35, line 7 skipping to change at page 35, line 7
else: else:
encodeInteger(prefixBuffer, 0x80, encodeInteger(prefixBuffer, 0x80,
largestReference - baseIndex, 7) largestReference - baseIndex, 7)
return controlBuffer, prefixBuffer + streamBuffer return controlBuffer, prefixBuffer + streamBuffer
Appendix C. Change Log Appendix C. Change Log
*RFC Editor's Note:* Please remove this section prior to *RFC Editor's Note:* Please remove this section prior to
publication of a final version of this document. publication of a final version of this document.
C.1. Since draft-ietf-quic-qpack-12 C.1. Since draft-ietf-quic-qpack-13
No changes
C.2. Since draft-ietf-quic-qpack-12
Editorial changes only Editorial changes only
C.2. Since draft-ietf-quic-qpack-11 C.3. Since draft-ietf-quic-qpack-11
Editorial changes only Editorial changes only
C.3. Since draft-ietf-quic-qpack-10 C.4. Since draft-ietf-quic-qpack-10
Editorial changes only Editorial changes only
C.4. Since draft-ietf-quic-qpack-09 C.5. Since draft-ietf-quic-qpack-09
* Decoders MUST emit Header Acknowledgements (#2939) * Decoders MUST emit Header Acknowledgements (#2939)
* Updated error code for multiple encoder or decoder streams (#2970) * Updated error code for multiple encoder or decoder streams (#2970)
* Added explicit defaults for new SETTINGS (#2974) * Added explicit defaults for new SETTINGS (#2974)
C.5. Since draft-ietf-quic-qpack-08 C.6. Since draft-ietf-quic-qpack-08
* Endpoints are permitted to create encoder and decoder streams even * Endpoints are permitted to create encoder and decoder streams even
if they can't use them (#2100, #2529) if they can't use them (#2100, #2529)
* Maximum values for settings removed (#2766, #2767) * Maximum values for settings removed (#2766, #2767)
C.6. Since draft-ietf-quic-qpack-06 C.7. Since draft-ietf-quic-qpack-06
* Clarify initial dynamic table capacity maximums (#2276, #2330, * Clarify initial dynamic table capacity maximums (#2276, #2330,
#2330) #2330)
C.7. Since draft-ietf-quic-qpack-05 C.8. Since draft-ietf-quic-qpack-05
* Introduced the terms dynamic table capacity and maximum dynamic * Introduced the terms dynamic table capacity and maximum dynamic
table capacity. table capacity.
* Renamed SETTINGS_HEADER_TABLE_SIZE to * Renamed SETTINGS_HEADER_TABLE_SIZE to
SETTINGS_QPACK_MAX_TABLE_CAPACITY. SETTINGS_QPACK_MAX_TABLE_CAPACITY.
C.8. Since draft-ietf-quic-qpack-04 C.9. Since draft-ietf-quic-qpack-04
* Changed calculation of Delta Base Index to avoid an illegal value * Changed calculation of Delta Base Index to avoid an illegal value
(#2002, #2005) (#2002, #2005)
C.9. Since draft-ietf-quic-qpack-03 C.10. Since draft-ietf-quic-qpack-03
* Change HTTP settings defaults (#2038) * Change HTTP settings defaults (#2038)
* Substantial editorial reorganization * Substantial editorial reorganization
C.10. Since draft-ietf-quic-qpack-02 C.11. Since draft-ietf-quic-qpack-02
* Largest Reference encoded modulo MaxEntries (#1763) * Largest Reference encoded modulo MaxEntries (#1763)
* New Static Table (#1355) * New Static Table (#1355)
* Table Size Update with Insert Count=0 is a connection error * Table Size Update with Insert Count=0 is a connection error
(#1762) (#1762)
* Stream Cancellations are optional when * Stream Cancellations are optional when
SETTINGS_HEADER_TABLE_SIZE=0 (#1761) SETTINGS_HEADER_TABLE_SIZE=0 (#1761)
skipping to change at page 36, line 33 skipping to change at page 36, line 38
* Implementations must handle 62 bit integers (#1760) * Implementations must handle 62 bit integers (#1760)
* Different error types for each QPACK stream, other changes to * Different error types for each QPACK stream, other changes to
error handling (#1726) error handling (#1726)
* Preserve header field order (#1725) * Preserve header field order (#1725)
* Initial table size is the maximum permitted when table is first * Initial table size is the maximum permitted when table is first
usable (#1642) usable (#1642)
C.11. Since draft-ietf-quic-qpack-01 C.12. Since draft-ietf-quic-qpack-01
* Only header blocks that reference the dynamic table are * Only header blocks that reference the dynamic table are
acknowledged (#1603, #1605) acknowledged (#1603, #1605)
C.12. Since draft-ietf-quic-qpack-00 C.13. Since draft-ietf-quic-qpack-00
* Renumbered instructions for consistency (#1471, #1472) * Renumbered instructions for consistency (#1471, #1472)
* Decoder is allowed to validate largest reference (#1404, #1469) * Decoder is allowed to validate largest reference (#1404, #1469)
* Header block acknowledgments also acknowledge the associated * Header block acknowledgments also acknowledge the associated
largest reference (#1370, #1400) largest reference (#1370, #1400)
* Added an acknowledgment for unread streams (#1371, #1400) * Added an acknowledgment for unread streams (#1371, #1400)
* Removed framing from encoder stream (#1361,#1467) * Removed framing from encoder stream (#1361,#1467)
* Control streams use typed unidirectional streams rather than fixed * Control streams use typed unidirectional streams rather than fixed
stream IDs (#910,#1359) stream IDs (#910,#1359)
C.13. Since draft-ietf-quic-qcram-00 C.14. Since draft-ietf-quic-qcram-00
* Separate instruction sets for table updates and header blocks * Separate instruction sets for table updates and header blocks
(#1235, #1142, #1141) (#1235, #1142, #1141)
* Reworked indexing scheme (#1176, #1145, #1136, #1130, #1125, * Reworked indexing scheme (#1176, #1145, #1136, #1130, #1125,
#1314) #1314)
* Added mechanisms that support one-pass encoding (#1138, #1320) * Added mechanisms that support one-pass encoding (#1138, #1320)
* Added a setting to control the number of blocked decoders (#238, * Added a setting to control the number of blocked decoders (#238,
 End of changes. 19 change blocks. 
32 lines changed or deleted 36 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/