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