Skip to main content

Using QUIC Stream Resets with Partial Delivery in HTTP/3
draft-seemann-httpbis-reset-stream-at-00

Document Type Active Internet-Draft (individual)
Author Marten Seemann
Last updated 2026-06-29
RFC stream (None)
Intended RFC status (None)
Formats
Stream Stream state (No stream defined)
Consensus boilerplate Unknown
RFC Editor Note (None)
IESG IESG state I-D Exists
Telechat date (None)
Responsible AD (None)
Send notices to (None)
draft-seemann-httpbis-reset-stream-at-00
HTTP                                                          M. Seemann
Internet-Draft                                              29 June 2026
Intended status: Informational                                          
Expires: 31 December 2026

        Using QUIC Stream Resets with Partial Delivery in HTTP/3
                draft-seemann-httpbis-reset-stream-at-00

Abstract

   QUIC stream resets do not guarantee delivery of stream data sent
   before the reset.  This is a problem for HTTP/3 when the correct
   protocol outcome is an abrupt stream termination, but the sender
   still has a bounded prefix worth delivering, such as response
   headers, a short diagnostic response body, or a partial response
   received from an upstream host.

   RESET_STREAM_AT provides reliable delivery of that prefix and is
   already used by WebTransport over HTTP/3 when resetting streams.  The
   same mechanism also fits HTTP/3 CONNECT tunnels, intermediary
   failures after response commitment, malformed decoded HTTP messages,
   and requests rejected before application processing.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the HTTP Working Group
   mailing list (ietf-http-wg@w3.org), which is archived at
   https://lists.w3.org/Archives/Public/ietf-http-wg/.

   Source for this draft and an issue tracker can be found at
   https://github.com/marten-seemann/draft-seemann-httpbis-reset-stream-
   at.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

Seemann                 Expires 31 December 2026                [Page 1]
Internet-Draft    Reliable QUIC Stream Resets in HTTP/3        June 2026

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on 31 December 2026.

Copyright Notice

   Copyright (c) 2026 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents (https://trustee.ietf.org/
   license-info) in effect on the date of publication of this document.
   Please review these documents carefully, as they describe your rights
   and restrictions with respect to this document.  Code Components
   extracted from this document must include Revised BSD License text as
   described in Section 4.e of the Trust Legal Provisions and are
   provided without warranty as described in the Revised BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Conventions and Definitions . . . . . . . . . . . . . . . . .   3
   3.  Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . .   3
     3.1.  CONNECT Tunnels . . . . . . . . . . . . . . . . . . . . .   3
     3.2.  Intermediaries After Response Commitment  . . . . . . . .   4
     3.3.  Malformed Decoded HTTP Messages . . . . . . . . . . . . .   4
     3.4.  Requests Rejected Before Application Processing . . . . .   4
   4.  Security Considerations . . . . . . . . . . . . . . . . . . .   5
   5.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   5
   6.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   5
     6.1.  Normative References  . . . . . . . . . . . . . . . . . .   5
     6.2.  Informative References  . . . . . . . . . . . . . . . . .   5
   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .   6
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   6

1.  Introduction

   HTTP/3 [HTTP3] uses QUIC streams to carry requests and responses.
   Several HTTP/3 errors are signaled by abruptly terminating a stream
   with an error code, but a QUIC stream reset does not ensure delivery
   of data sent before the reset.

Seemann                 Expires 31 December 2026                [Page 2]
Internet-Draft    Reliable QUIC Stream Resets in HTTP/3        June 2026

   This matters when the sender has a useful bounded prefix, but the
   correct HTTP/3 outcome is still a stream error.  Examples include a
   proxy that has received response bytes before an upstream failure, or
   a server that has decoded a malformed request and wants to send a
   short diagnostic response before using H3_MESSAGE_ERROR.

   RESET_STREAM_AT [RESET-STREAM-AT] adds a Reliable Size to the reset,
   so stream data up to that point is delivered reliably while the
   stream still terminates abruptly.  WebTransport over HTTP/3
   [WEBTRANS-HTTP3] already uses this extension to ensure delivery of
   the prefix that associates a WebTransport stream with its session.

   The following sections describe HTTP/3 cases where reliable prefix
   delivery is useful while retaining the existing stream-error signal.

2.  Conventions and Definitions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

3.  Use Cases

3.1.  CONNECT Tunnels

   The relay use case described in [RESET-STREAM-AT] directly applies to
   HTTP/3 CONNECT.  HTTP/3 CONNECT carries tunnel data in DATA frames
   after a successful CONNECT response.  [HTTP3] says that TCP
   connection errors, including TCP reset, are signaled as stream errors
   of type H3_CONNECT_ERROR.

   A proxy might receive bytes from the upstream TCP connection and then
   observe an upstream reset.  With a plain stream reset, DATA frames
   containing those upstream bytes might be lost and will not be
   retransmitted.  Using RESET_STREAM_AT allows the proxy to signal
   H3_CONNECT_ERROR while still delivering the upstream bytes that it
   has committed to forwarding.

   For this use case, the Reliable Size SHOULD be the end of the last
   committed DATA frame carrying tunnel bytes from the upstream
   connection.

Seemann                 Expires 31 December 2026                [Page 3]
Internet-Draft    Reliable QUIC Stream Resets in HTTP/3        June 2026

3.2.  Intermediaries After Response Commitment

   An intermediary can translate an upstream failure into a new HTTP
   response only before it sends response headers downstream.  After
   that, it cannot replace the response with a new status code.

   If the intermediary later detects an upstream stream error, a
   malformed upstream response, or another stream-local failure,
   RESET_STREAM_AT allows it to terminate the stream with an appropriate
   HTTP/3 error code while making reliable only the response portion it
   can safely identify.  That portion always includes the committed
   response HEADERS frame, and can include later response data when the
   intermediary understands enough of the application protocol to choose
   a useful boundary.  The Reliable Size SHOULD therefore be the end of
   the response HEADERS frame, or the end of a later complete HTTP/3
   frame forwarded downstream.

   This is mainly useful for diagnostics, logging, and clients that can
   consume a partial streaming response before an error.

3.3.  Malformed Decoded HTTP Messages

   This use case applies after an HTTP/3 HEADERS frame has been parsed
   and QPACK decompression has succeeded.  It does not apply to invalid
   HTTP/3 frame syntax, invalid frame ordering, or QPACK decompression
   failure.  Examples of malformed HTTP messages under [HTTP3] include
   invalid pseudo-header fields and uppercase field names.  A detected
   malformed message is treated as a stream error of type
   H3_MESSAGE_ERROR.

   RESET_STREAM_AT allows a diagnostic HTTP response to be delivered
   while preserving the H3_MESSAGE_ERROR signal.  The Reliable Size
   SHOULD be the end of the diagnostic response HEADERS frame, or the
   end of a later complete DATA frame carrying a short diagnostic
   response body.

   The additional information can be valuable when debugging faulty or
   non-conforming clients.

3.4.  Requests Rejected Before Application Processing

   [HTTP3] defines H3_REQUEST_REJECTED for requests that a server
   rejects without performing application processing.  A client can
   treat such a request as though it had never been sent.
   H3_REQUEST_REJECTED is not used after partial or full application
   processing.

Seemann                 Expires 31 December 2026                [Page 4]
Internet-Draft    Reliable QUIC Stream Resets in HTTP/3        June 2026

   A server might want to preserve this retry signal while also
   providing a small diagnostic response.  For example, a server that is
   draining, overloaded, or unable to route a request might send a 503
   or 429 response with retry information, then terminate the stream
   with H3_REQUEST_REJECTED.

   With RESET_STREAM_AT, the Reliable Size SHOULD be the end of the
   diagnostic response HEADERS frame, or the end of a later complete
   DATA frame carrying a short diagnostic response body.  This is mainly
   useful for HTTP/3-aware clients and debugging tools.  A generic HTTP
   client API might not expose both the HTTP response and the stream
   error.

4.  Security Considerations

   TODO Security

5.  IANA Considerations

   This document has no IANA actions.

6.  References

6.1.  Normative References

   [HTTP3]    Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114,
              June 2022, <https://www.rfc-editor.org/rfc/rfc9114>.

   [RESET-STREAM-AT]
              Seemann, M. and K. Oku, "QUIC Stream Resets with Partial
              Delivery", Work in Progress, Internet-Draft, draft-ietf-
              quic-reliable-stream-reset-08, 26 June 2026,
              <https://datatracker.ietf.org/doc/html/draft-ietf-quic-
              reliable-stream-reset-08>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/rfc/rfc2119>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.

6.2.  Informative References

Seemann                 Expires 31 December 2026                [Page 5]
Internet-Draft    Reliable QUIC Stream Resets in HTTP/3        June 2026

   [WEBTRANS-HTTP3]
              Frindell, A., Kinnear, E., and V. Vasiliev, "WebTransport
              over HTTP/3", Work in Progress, Internet-Draft, draft-
              ietf-webtrans-http3-15, 2 March 2026,
              <https://datatracker.ietf.org/doc/html/draft-ietf-
              webtrans-http3-15>.

Acknowledgments

   TODO acknowledge.

Author's Address

   Marten Seemann
   Email: martenseemann@gmail.com

Seemann                 Expires 31 December 2026                [Page 6]