Re: [quicwg/base-drafts] Import most H2 references (#3407)

Martin Thomson <> Wed, 12 February 2020 00:51 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id D6BC3120073 for <>; Tue, 11 Feb 2020 16:51:01 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -5.3
X-Spam-Status: No, score=-5.3 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id JETSX5XAQpyM for <>; Tue, 11 Feb 2020 16:51:00 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 13FC5120026 for <>; Tue, 11 Feb 2020 16:51:00 -0800 (PST)
Received: from ( []) by (Postfix) with ESMTP id 3E51D8C0F25 for <>; Tue, 11 Feb 2020 16:50:59 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=pf2014; t=1581468659; bh=rfKLFIbn19ChKv/Abmm9qoxhF7vIMOsUyVWoCh4AvKo=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=Q5NOlJFWQiZylQFDIPm+PgSC4D55epWYHWhNXD08O7pvam16szIzjtxQ0idN9TTdN ggNxV/wzTzqb+TRaRPk1bgkkwAiDRU3p42NMfHW2TJulPesmoJeEVeiW1iNvH0498N TtMv1plwW5EmlssfHTrvEDQMGTnbgDvhj3NcTj74=
Date: Tue, 11 Feb 2020 16:50:59 -0800
From: Martin Thomson <>
Reply-To: quicwg/base-drafts <>
To: quicwg/base-drafts <>
Cc: Subscribed <>
Message-ID: <quicwg/base-drafts/pull/3407/review/>
In-Reply-To: <quicwg/base-drafts/pull/>
References: <quicwg/base-drafts/pull/>
Subject: Re: [quicwg/base-drafts] Import most H2 references (#3407)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5e434bf32dea8_1d413ff4768cd96c15447f"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: martinthomson
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
Archived-At: <>
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 12 Feb 2020 00:51:02 -0000

martinthomson commented on this pull request.

Generally good.  A few corner cases seem problematic though.

> -requests MUST conform to the requirements in Section 8.2 of {{!HTTP2}}.
+{{frame-push-promise}}) on the request stream which generated the push. This
+allows the server push to be associated with a client request.
+Not all requests can be pushed.  A server MAY push requests which have the
+following properties:
+- cacheable (see Section 4.2.3 of [RFC7231])
+- safe (see Section 4.2.1 of [RFC7231])
+- does not include a request body
+Clients SHOULD send a CANCEL_PUSH frame upon receipt of a PUSH_PROMISE frame
+carrying a request which is not cacheable, is not known to be safe, or that
+indicates the presence of a request body.  If the pushed response arrives on a
+push stream, this MAY be treated as a stream error of type

This is a bit weird in the sense that some of this is just an error.  If I get a PUSH_PROMISE with `Content-Length > 0`, why would I cancel it rather than treat that as an error?  

Whether something is "cacheable" might be unknowable based on the request alone, but some errors are pretty sharp.  There are other cases which are less clear too, such as `Content-Type` maybe indicating the presence of a request body, so I get how this might be tricky to handle in the general case.

> -{{malformed}}). The request stream MUST NOT be closed at the end of the request.
+In HTTP/1.x, CONNECT is used to convert an entire HTTP connection into a tunnel
+to a remote host. In HTTP/2 and HTTP/3, the CONNECT method is used to establish
+a tunnel over a single stream.
+A CONNECT request MUST be constructed as follows:
+- The ":method" pseudo-header field is set to "CONNECT"
+- The ":scheme" and ":path" pseudo-header fields are omitted
+- The ":authority" pseudo-header field contains the host and port to connect to
+  (equivalent to the authority-form of the request-target of CONNECT requests
+  (see Section 5.3 of [RFC7230]))
+A CONNECT request that does not conform to these restrictions is malformed (see
+{{malformed}}).  The request stream MUST NOT be closed at the end of the

This last sentence can go.  It is entirely valid for the request stream to be closed without sending anything, though it is admittedly not always very useful.

You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub: