diff --git a/draft-ietf-quic-http.html b/draft-ietf-quic-http.html index e6cd4c80d4..6aedb643ae 100644 --- a/draft-ietf-quic-http.html +++ b/draft-ietf-quic-http.html @@ -826,7 +826,7 @@
- This Internet-Draft will expire on 9 July 2021.¶
1. Introduction¶
1.1. Prior versions of HTTP¶
1.2. Delegation to QUIC¶
2. HTTP/3 Protocol Overview¶
2.1. Document Organization¶
2.2. Conventions and Terminology¶
3. Connection Setup and Management¶
3.1. Discovering an HTTP/3 Endpoint¶
3.1.1. HTTP Alternative Services¶
3.1.2. Other Schemes¶
3.2. Connection Establishment¶
3.3. Connection Reuse¶
4. HTTP Request Lifecycle¶
4.1. HTTP Message Exchanges¶
4.1.1. Field Formatting and Compression¶
4.1.2. Request Cancellation and Rejection¶
4.1.3. Malformed Requests and Responses¶
4.2. The CONNECT Method¶
4.3. HTTP Upgrade¶
4.4. Server Push¶
5. Connection Closure¶
5.1. Idle Connections¶
5.2. Connection Shutdown¶
5.3. Immediate Application Closure¶
5.4. Transport Closure¶
6. Stream Mapping and Usage¶
6.1. Bidirectional Streams¶
6.2. Unidirectional Streams¶
6.2.1. Control Streams¶
6.2.2. Push Streams¶
6.2.3. Reserved Stream Types¶
7. HTTP Framing Layer¶
7.1. Frame Layout¶
7.2. Frame Definitions¶
7.2.1. DATA¶
7.2.2. HEADERS¶
7.2.3. CANCEL_PUSH¶
7.2.4. SETTINGS¶
7.2.5. PUSH_PROMISE¶
7.2.6. GOAWAY¶
7.2.7. MAX_PUSH_ID¶
7.2.8. Reserved Frame Types¶
8. Error Handling¶
8.1. HTTP/3 Error Codes¶
9. Extensions to HTTP/3¶
10. Security Considerations¶
10.1. Server Authority¶
10.2. Cross-Protocol Attacks¶
10.3. Intermediary Encapsulation Attacks¶
10.4. Cacheability of Pushed Responses¶
10.5. Denial-of-Service Considerations¶
10.5.1. Limits on Field Section Size¶
10.5.2. CONNECT Issues¶
10.6. Use of Compression¶
10.7. Padding and Traffic Analysis¶
10.8. Frame Parsing¶
10.9. Early Data¶
10.10. Migration¶
10.11. Privacy Considerations¶
11. IANA Considerations¶
11.1. Registration of HTTP/3 Identification String¶
11.2. New Registries¶
11.2.1. Frame Types¶
11.2.2. Settings Parameters¶
11.2.3. Error Codes¶
11.2.4. Stream Types¶
12. References¶
12.1. Normative References¶
12.2. Informative References¶
Appendix A. Considerations for Transitioning from HTTP/2¶
A.1. Streams¶
A.2. HTTP Frame Types¶
A.2.1. Prioritization Differences¶
A.2.2. Field Compression Differences¶
A.2.3. Flow Control Differences¶
A.2.4. Guidance for New Frame Type Definitions¶
A.2.5. Mapping Between HTTP/2 and HTTP/3 Frame Types¶
A.3. HTTP/2 SETTINGS Parameters¶
A.4. HTTP/2 Error Codes¶
A.4.1. Mapping Between HTTP/2 and HTTP/3 Errors¶
Appendix B. Change Log¶
B.1. Since draft-ietf-quic-http-32¶
B.2. Since draft-ietf-quic-http-31¶
B.3. Since draft-ietf-quic-http-30¶
B.4. Since draft-ietf-quic-http-29¶
B.5. Since draft-ietf-quic-http-28¶
B.6. Since draft-ietf-quic-http-27¶
B.7. Since draft-ietf-quic-http-26¶
B.8. Since draft-ietf-quic-http-25¶
B.9. Since draft-ietf-quic-http-24¶
B.10. Since draft-ietf-quic-http-23¶
B.11. Since draft-ietf-quic-http-22¶
B.12. Since draft-ietf-quic-http-21¶
B.13. Since draft-ietf-quic-http-20¶
B.14. Since draft-ietf-quic-http-19¶
B.15. Since draft-ietf-quic-http-18¶
B.16. Since draft-ietf-quic-http-17¶
B.17. Since draft-ietf-quic-http-16¶
B.18. Since draft-ietf-quic-http-15¶
B.19. Since draft-ietf-quic-http-14¶
B.20. Since draft-ietf-quic-http-13¶
B.21. Since draft-ietf-quic-http-12¶
B.22. Since draft-ietf-quic-http-11¶
B.23. Since draft-ietf-quic-http-10¶
B.24. Since draft-ietf-quic-http-09¶
B.25. Since draft-ietf-quic-http-08¶
B.26. Since draft-ietf-quic-http-07¶
B.27. Since draft-ietf-quic-http-06¶
B.28. Since draft-ietf-quic-http-05¶
B.29. Since draft-ietf-quic-http-04¶
B.30. Since draft-ietf-quic-http-03¶
B.31. Since draft-ietf-quic-http-02¶
B.32. Since draft-ietf-quic-http-01¶
B.33. Since draft-ietf-quic-http-00¶
B.34. Since draft-shade-quic-http2-mapping-00¶
Acknowledgments¶
Author's Address¶
1. An Extremely Abstract Description of QUIC¶
2. Fixed Properties of All QUIC Versions¶
3. Conventions and Definitions¶
4. Notational Conventions¶
5. QUIC Packets¶
5.1. Long Header¶
5.2. Short Header¶
5.3. Connection ID¶
5.4. Version¶
6. Version Negotiation¶
7. Security and Privacy Considerations¶
8. IANA Considerations¶
9. References¶
9.1. Normative References¶
9.2. Informative References¶
Appendix A. Incorrect Assumptions¶
1.1. Conventions and Definitions¶
1.2. Notational Conventions¶
2. Compression Process Overview¶
2.1. Encoder¶
2.1.1. Limits on Dynamic Table Insertions¶
2.1.2. Blocked Streams¶
2.1.3. Avoiding Flow Control Deadlocks¶
2.1.4. Known Received Count¶
2.2. Decoder¶
2.2.1. Blocked Decoding¶
2.2.2. State Synchronization¶
2.2.3. Invalid References¶
3. Reference Tables¶
3.1. Static Table¶
3.2. Dynamic Table¶
3.2.1. Dynamic Table Size¶
3.2.2. Dynamic Table Capacity and Eviction¶
3.2.3. Maximum Dynamic Table Capacity¶
3.2.4. Absolute Indexing¶
3.2.5. Relative Indexing¶
3.2.6. Post-Base Indexing¶
4. Wire Format¶
4.1. Primitives¶
4.1.1. Prefixed Integers¶
4.1.2. String Literals¶
4.2. Encoder and Decoder Streams¶
4.3. Encoder Instructions¶
4.3.1. Set Dynamic Table Capacity¶
4.3.2. Insert With Name Reference¶
4.3.3. Insert With Literal Name¶
4.3.4. Duplicate¶
4.4. Decoder Instructions¶
4.4.1. Section Acknowledgment¶
4.4.2. Stream Cancellation¶
4.4.3. Insert Count Increment¶
4.5. Field Line Representations¶
4.5.1. Encoded Field Section Prefix¶
4.5.2. Indexed Field Line¶
4.5.3. Indexed Field Line With Post-Base Index¶
4.5.4. Literal Field Line With Name Reference¶
4.5.5. Literal Field Line With Post-Base Name Reference¶
4.5.6. Literal Field Line With Literal Name¶
5. Configuration¶
6. Error Handling¶
7. Security Considerations¶
7.1. Probing Dynamic Table State¶
7.1.1. Applicability to QPACK and HTTP¶
7.1.2. Mitigation¶
7.1.3. Never-Indexed Literals¶
7.2. Static Huffman Encoding¶
7.3. Memory Consumption¶
7.4. Implementation Limits¶
8.1. Settings Registration¶
8.2. Stream Type Registration¶
8.3. Error Code Registration¶
Appendix A. Static Table¶
Appendix B. Encoding and Decoding Examples¶
B.1. Literal Field Line With Name Reference¶
B.2. Dynamic Table¶
B.3. Speculative Insert¶
B.4. Duplicate Instruction, Stream Cancellation¶
B.5. Dynamic Table Insert, Eviction¶
Appendix C. Sample One Pass Encoding Algorithm¶
Appendix D. Change Log¶
D.1. Since draft-ietf-quic-qpack-19¶
D.2. Since draft-ietf-quic-qpack-18¶
D.3. Since draft-ietf-quic-qpack-17¶
D.4. Since draft-ietf-quic-qpack-16¶
D.5. Since draft-ietf-quic-qpack-15¶
D.6. Since draft-ietf-quic-qpack-14¶
D.7. Since draft-ietf-quic-qpack-13¶
D.8. Since draft-ietf-quic-qpack-12¶
D.9. Since draft-ietf-quic-qpack-11¶
D.10. Since draft-ietf-quic-qpack-10¶
D.11. Since draft-ietf-quic-qpack-09¶
D.12. Since draft-ietf-quic-qpack-08¶
D.13. Since draft-ietf-quic-qpack-06¶
D.14. Since draft-ietf-quic-qpack-05¶
D.15. Since draft-ietf-quic-qpack-04¶
D.16. Since draft-ietf-quic-qpack-03¶
D.17. Since draft-ietf-quic-qpack-02¶
D.18. Since draft-ietf-quic-qpack-01¶
D.19. Since draft-ietf-quic-qpack-00¶
D.20. Since draft-ietf-quic-qcram-00¶
Authors' Addresses¶
2. Conventions and Definitions¶
3. Design of the QUIC Transmission Machinery¶
4. Relevant Differences Between QUIC and TCP¶
4.1. Separate Packet Number Spaces¶
4.2. Monotonically Increasing Packet Numbers¶
4.3. Clearer Loss Epoch¶
4.4. No Reneging¶
4.5. More ACK Ranges¶
4.6. Explicit Correction For Delayed Acknowledgments¶
4.7. Probe Timeout Replaces RTO and TLP¶
4.8. The Minimum Congestion Window is Two Packets¶
5. Estimating the Round-Trip Time¶
5.1. Generating RTT samples¶
5.2. Estimating min_rtt¶
5.3. Estimating smoothed_rtt and rttvar¶
6. Loss Detection¶
6.1. Acknowledgment-Based Detection¶
6.1.1. Packet Threshold¶
6.1.2. Time Threshold¶
6.2. Probe Timeout¶
6.2.1. Computing PTO¶
6.2.2. Handshakes and New Paths¶
6.2.3. Speeding Up Handshake Completion¶
6.2.4. Sending Probe Packets¶
6.3. Handling Retry Packets¶
6.4. Discarding Keys and Packet State¶
7. Congestion Control¶
7.1. Explicit Congestion Notification¶
7.2. Initial and Minimum Congestion Window¶
7.3. Congestion Control States¶
7.3.1. Slow Start¶
7.3.2. Recovery¶
7.3.3. Congestion Avoidance¶
7.4. Ignoring Loss of Undecryptable Packets¶
7.5. Probe Timeout¶
7.6. Persistent Congestion¶
7.6.1. Duration¶
7.6.2. Establishing Persistent Congestion¶
7.6.3. Example¶
7.7. Pacing¶
7.8. Under-utilizing the Congestion Window¶
8. Security Considerations¶
8.1. Congestion Signals¶
8.2. Traffic Analysis¶
8.3. Misreporting ECN Markings¶
9. IANA Considerations¶
10. References¶
10.1. Normative References¶
10.2. Informative References¶
Appendix A. Loss Recovery Pseudocode¶
A.1. Tracking Sent Packets¶
A.1.1. Sent Packet Fields¶
A.2. Constants of Interest¶
A.3. Variables of interest¶
A.4. Initialization¶
A.5. On Sending a Packet¶
A.6. On Receiving a Datagram¶
A.7. On Receiving an Acknowledgment¶
A.8. Setting the Loss Detection Timer¶
A.9. On Timeout¶
A.10. Detecting Lost Packets¶
A.11. Upon Dropping Initial or Handshake Keys¶
Appendix B. Congestion Control Pseudocode¶
B.1. Constants of interest¶
B.2. Variables of interest¶
B.3. Initialization¶
B.4. On Packet Sent¶
B.5. On Packet Acknowledgment¶
B.6. On New Congestion Event¶
B.7. Process ECN Information¶
B.8. On Packets Lost¶
B.9. Removing Discarded Packets From Bytes In Flight¶
Appendix C. Change Log¶
C.1. Since draft-ietf-quic-recovery-32¶
C.2. Since draft-ietf-quic-recovery-31¶
C.3. Since draft-ietf-quic-recovery-30¶
C.4. Since draft-ietf-quic-recovery-29¶
C.5. Since draft-ietf-quic-recovery-28¶
C.6. Since draft-ietf-quic-recovery-27¶
C.7. Since draft-ietf-quic-recovery-26¶
C.8. Since draft-ietf-quic-recovery-25¶
C.9. Since draft-ietf-quic-recovery-24¶
C.10. Since draft-ietf-quic-recovery-23¶
C.11. Since draft-ietf-quic-recovery-22¶
C.12. Since draft-ietf-quic-recovery-21¶
C.13. Since draft-ietf-quic-recovery-20¶
C.14. Since draft-ietf-quic-recovery-19¶
C.15. Since draft-ietf-quic-recovery-18¶
C.16. Since draft-ietf-quic-recovery-17¶
C.17. Since draft-ietf-quic-recovery-16¶
C.18. Since draft-ietf-quic-recovery-14¶
C.19. Since draft-ietf-quic-recovery-13¶
C.20. Since draft-ietf-quic-recovery-12¶
C.21. Since draft-ietf-quic-recovery-11¶
C.22. Since draft-ietf-quic-recovery-10¶
C.23. Since draft-ietf-quic-recovery-09¶
C.24. Since draft-ietf-quic-recovery-08¶
C.25. Since draft-ietf-quic-recovery-07¶
C.26. Since draft-ietf-quic-recovery-06¶
C.27. Since draft-ietf-quic-recovery-05¶
C.28. Since draft-ietf-quic-recovery-04¶
C.29. Since draft-ietf-quic-recovery-03¶
C.30. Since draft-ietf-quic-recovery-02¶
C.31. Since draft-ietf-quic-recovery-01¶
C.32. Since draft-ietf-quic-recovery-00¶
C.33. Since draft-iyengar-quic-loss-recovery-01¶
Appendix D. Contributors¶
2. Notational Conventions¶
2.1. TLS Overview¶
3. Protocol Overview¶
4. Carrying TLS Messages¶
4.1. Interface to TLS¶
4.1.1. Handshake Complete¶
4.1.2. Handshake Confirmed¶
4.1.3. Sending and Receiving Handshake Messages¶
4.1.4. Encryption Level Changes¶
4.1.5. TLS Interface Summary¶
4.2. TLS Version¶
4.3. ClientHello Size¶
4.4. Peer Authentication¶
4.5. Session Resumption¶
4.6. 0-RTT¶
4.6.1. Enabling 0-RTT¶
4.6.2. Accepting and Rejecting 0-RTT¶
4.6.3. Validating 0-RTT Configuration¶
4.7. HelloRetryRequest¶
4.8. TLS Errors¶
4.9. Discarding Unused Keys¶
4.9.1. Discarding Initial Keys¶
4.9.2. Discarding Handshake Keys¶
4.9.3. Discarding 0-RTT Keys¶
5. Packet Protection¶
5.1. Packet Protection Keys¶
5.2. Initial Secrets¶
5.3. AEAD Usage¶
5.4. Header Protection¶
5.4.1. Header Protection Application¶
5.4.2. Header Protection Sample¶
5.4.3. AES-Based Header Protection¶
5.4.4. ChaCha20-Based Header Protection¶
5.5. Receiving Protected Packets¶
5.6. Use of 0-RTT Keys¶
5.7. Receiving Out-of-Order Protected Packets¶
5.8. Retry Packet Integrity¶
6. Key Update¶
6.1. Initiating a Key Update¶
6.2. Responding to a Key Update¶
6.3. Timing of Receive Key Generation¶
6.4. Sending with Updated Keys¶
6.5. Receiving with Different Keys¶
6.6. Limits on AEAD Usage¶
6.7. Key Update Error Code¶
7. Security of Initial Messages¶
8. QUIC-Specific Adjustments to the TLS Handshake¶
8.1. Protocol Negotiation¶
8.2. QUIC Transport Parameters Extension¶
8.3. Removing the EndOfEarlyData Message¶
8.4. Prohibit TLS Middlebox Compatibility Mode¶
9. Security Considerations¶
9.1. Session Linkability¶
9.2. Replay Attacks with 0-RTT¶
9.3. Packet Reflection Attack Mitigation¶
9.4. Header Protection Analysis¶
9.5. Header Protection Timing Side-Channels¶
9.6. Key Diversity¶
9.7. Randomness¶
10. IANA Considerations¶
11. References¶
11.1. Normative References¶
11.2. Informative References¶
Appendix A. Sample Packet Protection¶
A.1. Keys¶
A.2. Client Initial¶
A.3. Server Initial¶
A.4. Retry¶
A.5. ChaCha20-Poly1305 Short Header Packet¶
Appendix B. AEAD Algorithm Analysis¶
B.1. Analysis of AEAD_AES_128_GCM and AEAD_AES_256_GCM Usage Limits¶
B.1.1. Confidentiality Limit¶
B.1.2. Integrity Limit¶
B.2. Analysis of AEAD_AES_128_CCM Usage Limits¶
C.1. Since draft-ietf-quic-tls-32¶
C.2. Since draft-ietf-quic-tls-31¶
C.3. Since draft-ietf-quic-tls-30¶
C.4. Since draft-ietf-quic-tls-29¶
C.5. Since draft-ietf-quic-tls-28¶
C.6. Since draft-ietf-quic-tls-27¶
C.7. Since draft-ietf-quic-tls-26¶
C.8. Since draft-ietf-quic-tls-25¶
C.9. Since draft-ietf-quic-tls-24¶
C.10. Since draft-ietf-quic-tls-23¶
C.11. Since draft-ietf-quic-tls-22¶
C.12. Since draft-ietf-quic-tls-21¶
C.13. Since draft-ietf-quic-tls-20¶
C.14. Since draft-ietf-quic-tls-18¶
C.15. Since draft-ietf-quic-tls-17¶
C.16. Since draft-ietf-quic-tls-14¶
C.17. Since draft-ietf-quic-tls-13¶
C.18. Since draft-ietf-quic-tls-12¶
C.19. Since draft-ietf-quic-tls-11¶
C.20. Since draft-ietf-quic-tls-10¶
C.21. Since draft-ietf-quic-tls-09¶
C.22. Since draft-ietf-quic-tls-08¶
C.23. Since draft-ietf-quic-tls-07¶
C.24. Since draft-ietf-quic-tls-05¶
C.25. Since draft-ietf-quic-tls-04¶
C.26. Since draft-ietf-quic-tls-03¶
C.27. Since draft-ietf-quic-tls-02¶
C.28. Since draft-ietf-quic-tls-01¶
C.29. Since draft-ietf-quic-tls-00¶
C.30. Since draft-thomson-quic-tls-01¶
Contributors¶
1. Overview¶
1.1. Document Structure¶
1.2. Terms and Definitions¶
1.3. Notational Conventions¶
2. Streams¶
2.1. Stream Types and Identifiers¶
2.2. Sending and Receiving Data¶
2.3. Stream Prioritization¶
2.4. Operations on Streams¶
3. Stream States¶
3.1. Sending Stream States¶
3.2. Receiving Stream States¶
3.3. Permitted Frame Types¶
3.4. Bidirectional Stream States¶
3.5. Solicited State Transitions¶
4. Flow Control¶
4.1. Data Flow Control¶
4.2. Increasing Flow Control Limits¶
4.3. Flow Control Performance¶
4.4. Handling Stream Cancellation¶
4.5. Stream Final Size¶
4.6. Controlling Concurrency¶
5. Connections¶
5.1. Connection ID¶
5.1.1. Issuing Connection IDs¶
5.1.2. Consuming and Retiring Connection IDs¶
5.2. Matching Packets to Connections¶
5.2.1. Client Packet Handling¶
5.2.2. Server Packet Handling¶
5.2.3. Considerations for Simple Load Balancers¶
5.3. Operations on Connections¶
6.1. Sending Version Negotiation Packets¶
6.2. Handling Version Negotiation Packets¶
6.2.1. Version Negotiation Between Draft Versions¶
6.3. Using Reserved Versions¶
7. Cryptographic and Transport Handshake¶
7.1. Example Handshake Flows¶
7.2. Negotiating Connection IDs¶
7.3. Authenticating Connection IDs¶
7.4. Transport Parameters¶
7.4.1. Values of Transport Parameters for 0-RTT¶
7.4.2. New Transport Parameters¶
7.5. Cryptographic Message Buffering¶
8. Address Validation¶
8.1. Address Validation During Connection Establishment¶
8.1.1. Token Construction¶
8.1.2. Address Validation using Retry Packets¶
8.1.3. Address Validation for Future Connections¶
8.1.4. Address Validation Token Integrity¶
8.2. Path Validation¶
8.2.1. Initiating Path Validation¶
8.2.2. Path Validation Responses¶
8.2.3. Successful Path Validation¶
8.2.4. Failed Path Validation¶
9. Connection Migration¶
9.1. Probing a New Path¶
9.2. Initiating Connection Migration¶
9.3. Responding to Connection Migration¶
9.3.1. Peer Address Spoofing¶
9.3.2. On-Path Address Spoofing¶
9.3.3. Off-Path Packet Forwarding¶
9.4. Loss Detection and Congestion Control¶
9.5. Privacy Implications of Connection Migration¶
9.6. Server's Preferred Address¶
9.6.1. Communicating a Preferred Address¶
9.6.2. Migration to a Preferred Address¶
9.6.3. Interaction of Client Migration and Preferred Address¶
9.7. Use of IPv6 Flow-Label and Migration¶
10. Connection Termination¶
10.1. Idle Timeout¶
10.1.1. Liveness Testing¶
10.1.2. Deferring Idle Timeout¶
10.2. Immediate Close¶
10.2.1. Closing Connection State¶
10.2.2. Draining Connection State¶
10.2.3. Immediate Close During the Handshake¶
10.3. Stateless Reset¶
10.3.1. Detecting a Stateless Reset¶
10.3.2. Calculating a Stateless Reset Token¶
10.3.3. Looping¶
11. Error Handling¶
11.1. Connection Errors¶
11.2. Stream Errors¶
12. Packets and Frames¶