Re: HTTP/3 server push: handling of lost PUSH_PROMISE
Martin Thomson <mt@lowentropy.net> Tue, 27 July 2021 06:31 UTC
Return-Path: <mt@lowentropy.net>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 50AA83A16BA for <quic@ietfa.amsl.com>; Mon, 26 Jul 2021 23:31:36 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.798
X-Spam-Level:
X-Spam-Status: No, score=-2.798 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=lowentropy.net header.b=249FNEGP; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=XKo6g4Ua
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zZdoxWEVu3Tf for <quic@ietfa.amsl.com>; Mon, 26 Jul 2021 23:31:31 -0700 (PDT)
Received: from wout4-smtp.messagingengine.com (wout4-smtp.messagingengine.com [64.147.123.20]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 087603A16B0 for <quic@ietf.org>; Mon, 26 Jul 2021 23:31:30 -0700 (PDT)
Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.west.internal (Postfix) with ESMTP id 061453200930 for <quic@ietf.org>; Tue, 27 Jul 2021 02:31:27 -0400 (EDT)
Received: from imap41 ([10.202.2.91]) by compute5.internal (MEProxy); Tue, 27 Jul 2021 02:31:28 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lowentropy.net; h=mime-version:message-id:in-reply-to:references:date:from:to :subject:content-type; s=fm2; bh=jQMhvbIpntu/PizOzhap/+/vSg0V+Rd Bx17iMgx9LU8=; b=249FNEGP+E4m9gxMMkypHrAzR3PnHyBvOj48bBws2BPNUsu sfrGGQtH+Si280MzhD9g6z26Xv54Zts2AYInGjA0bcq4OLi/AeNgwHNVOLGtrM/z wf/ztQ0PiS+KTzLXMFr4WoO1/OQ49S1hGIiYF6l0FiXOE6L+x8z/DKWD1RK8PE21 cFgbICSKAO5mj/Vog7eJFPYAc6H3bDzbRzUtpry5dvtCDzVS+OJc50CnK/aFIOtc OmR3Q336vhV6Mh3WFaLJfgKyWmNTmUwQuc3yyjVsti62jGet6awh/3KP8MQf3V4o n9dkTzE0xJg6M/K3XSYp2Mo0JeSVmWSSP0KfHOQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=jQMhvb Ipntu/PizOzhap/+/vSg0V+RdBx17iMgx9LU8=; b=XKo6g4UatSfynAz/jtSWQ+ tdX9C0cJ4my7P/vAtNAQxibPu5z/JGnbVJW83q3cEv8AHcZZfvJtyE1Rdr0cH/ix wjUI5megXhsuGUv0yqUZHpPmcfaGqd9WIw8zSVSLJPNm85NoM6WKty1hsSq5KRkX G9DBnBUMd2UnlTd0bVyGWIm9zDHLn65JePOcjU9H8Y/mMUf9No2rUqu9kYFtpzlh sgtJDHXkQSeTJ7VAsp+J+H7BnoPg1sPbU9kjGnTrDNshoKqqstZ21WRDQDngjDvL ilpqcOx0t14y4NRHuCRkEwRT7bu5v3ADHgsTf++JYz/EMlpimgBg5kWusrxQRTBA ==
X-ME-Sender: <xms:P6j_YK9tb8rEIRS1LfXtgqIZROkUq7F03k4cecDKALy64VJDSDHWpg> <xme:P6j_YKsJR3VyM59lIRILppZ1-q4G38pgG8lotLjpCznMVdqF_2iDtfdgLU8dHg4KS bYWKIn47fslJjIRHhk>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrgeeigdelkecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecunecujfgurhepofgfggfkjghffffhvffutgesthdtre dtreertdenucfhrhhomhepfdforghrthhinhcuvfhhohhmshhonhdfuceomhhtsehlohif vghnthhrohhphidrnhgvtheqnecuggftrfgrthhtvghrnhepieefleejkeeiuddvgfekie ehleeivddvteegledvgfehgeeffffhfedttdduueeinecuffhomhgrihhnpehhthhtphdv hihouhhsthhilhhlhhgrvhgvthhouhhpuggrthgvthhhvghhphgrtghkthgrsghlvggrfh htvghrrhgvshgvthhtihhnghgrshhtrhgvrghmrdhithenucevlhhushhtvghrufhiiigv pedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehmtheslhhofigvnhhtrhhophihrdhnvg ht
X-ME-Proxy: <xmx:P6j_YAAY8-ymHMrRgPEFrPD9tMiWdMtai-xI8XAAYRm8ZpnHLMbFFg> <xmx:P6j_YCek9K-rS19I55ofd621PCRO8lPan5vB7OCe5H_T5AxqBhJMVg> <xmx:P6j_YPOy3Bgy571iTU7POZrYAkMIM5ViPAJkr-Zzl5eyrjGTlUiEcg> <xmx:P6j_YFY_GGWPR-okKXNVxCRGh15PezWSkoNsbpA_OM6LnnCJmTWRIA>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 102843C0471; Tue, 27 Jul 2021 02:31:27 -0400 (EDT)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.5.0-alpha0-545-g7a4eea542e-fm-20210727.001-g7a4eea54
Mime-Version: 1.0
Message-Id: <72de8a9e-9f93-4bdc-8c2a-3f359beb94ac@www.fastmail.com>
In-Reply-To: <CAPyZ6=+tCHNGYq0Za38-pju23_d_2wwXbWMgCbJK_Ou8mH3aKQ@mail.gmail.com>
References: <CAPyZ6=+tCHNGYq0Za38-pju23_d_2wwXbWMgCbJK_Ou8mH3aKQ@mail.gmail.com>
Date: Tue, 27 Jul 2021 16:31:09 +1000
From: Martin Thomson <mt@lowentropy.net>
To: quic@ietf.org
Subject: Re: HTTP/3 server push: handling of lost PUSH_PROMISE
Content-Type: text/plain
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/g5XrY8Phik8znNQEnaTaiLObOf4>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 27 Jul 2021 06:31:36 -0000
This is a case where QUIC processing something doesn't imply HTTP/3 processing something. QUIC read the data and "processed" it. HTTP/3 decided not to handle it deliberately, and the PUSH_PROMISE fell between the cracks. One "solution" is to insist that endpoints attempt to process streams for this stuff if they decide to discard responses. This is like how in HTTP/2 you still have to update the HPACK table after resetting a stream. It's awkward, but I think that it would work if data is available. I don't think that there is any case in which data is unavailable to the client but the server doesn't receive STOP_SENDING. On Tue, Jul 27, 2021, at 13:01, Tatsuhiro Tsujikawa wrote: > Hi, > > It looks like in certain conditions, client is unable to process pushed > stream and leaves it in unprocessable state indefinitely. > > Consider that client opens bidi stream and server sends PUSH_PROMISE > and completes the response body which is very short (just a single packet > or two). For some reason, client has decided to stop reading > response, but FIN is seen (data recvd state), and does not send > STOP_SENDING because it is not required (RFC mentions that it has a > little value to send STOP_SENDING in data recvd state and > unnecessary). Client discards all stream data without handing it over > to application, so PUSH_PROMISE is not processed. Client does not > know the push ID. Because STOP_SENDING is not sent, server has no signal > which indicates PUSH_PROMISE is not processed, and opens a pushed > stream. Client receives pushed stream, but unable to find the > corresponding PUSH_PROMISE. It holds pushed stream until it sees > PUSH_PROMISE, but it never come. This causes the pushed stream to be held by > client indefinitely. > > Even if client sends STOP_SENDING to the bidi stream, it might not > work if server finishes sending stream data and a pushed stream and > forgets them before receiving STOP_SENDING. > > Best regards, > Tatsuhiro Tsujikawa
- HTTP/3 server push: handling of lost PUSH_PROMISE Tatsuhiro Tsujikawa
- Re: HTTP/3 server push: handling of lost PUSH_PRO… Martin Thomson
- Re: HTTP/3 server push: handling of lost PUSH_PRO… Tatsuhiro Tsujikawa
- Re: HTTP/3 server push: handling of lost PUSH_PRO… Mikkel Fahnøe Jørgensen
- Re: HTTP/3 server push: handling of lost PUSH_PRO… Kazuho Oku
- Re: HTTP/3 server push: handling of lost PUSH_PRO… Tatsuhiro Tsujikawa
- Re: HTTP/3 server push: handling of lost PUSH_PRO… Kazuho Oku
- Re: HTTP/3 server push: handling of lost PUSH_PRO… Tatsuhiro Tsujikawa