HTTP/3 server push: handling of lost PUSH_PROMISE

Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> Tue, 27 July 2021 03:01 UTC

Return-Path: <tatsuhiro.t@gmail.com>
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 8358B3A15BD for <quic@ietfa.amsl.com>; Mon, 26 Jul 2021 20:01:19 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.098
X-Spam-Level:
X-Spam-Status: No, score=-2.098 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, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
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 ABLrWqRvJkU8 for <quic@ietfa.amsl.com>; Mon, 26 Jul 2021 20:01:18 -0700 (PDT)
Received: from mail-oi1-x236.google.com (mail-oi1-x236.google.com [IPv6:2607:f8b0:4864:20::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 2E5AB3A15BC for <quic@ietf.org>; Mon, 26 Jul 2021 20:01:17 -0700 (PDT)
Received: by mail-oi1-x236.google.com with SMTP id l126so13541102oib.2 for <quic@ietf.org>; Mon, 26 Jul 2021 20:01:17 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=gcFXhQlx7Y1zyEarvBpX4JAXXM5erhFZZpXveK08/KM=; b=n7sUst56iPQ2yIHcI0eVQxSN2F9UHsknSR45Zkjde5t/KGqYJIdaQsf2BfmFZkWgow BLReooFN5rJF2VMjATBHrMWAP8FTuvJlP0YiurhRPUlBPZRiMrhx5P0ZD8Ezy+bhlaid 1H86w6jljtLEqldYmXCgiqGe1Q0FTe5irZTMd9sOUx24emP7dixq+CXJp2WS6Gu7isXk Gq+UmMsJub2buHgN8z22vwEl9J2bQcvGmvX4+9SFCY4bxb1CbnGLTwa5qQaaaicWzndl BqwAYBd90MQ13oenbDg7Shpvnw6V5SgI2fTcdNkazI+2V3GFcjz1oVUmoPu3b80gybOe ufQA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=gcFXhQlx7Y1zyEarvBpX4JAXXM5erhFZZpXveK08/KM=; b=sr0faZI0+5mXsvJo344WxHvSGud68owFCohIQK+u1atNm8rJ1uzeuKkjkZ1qk0NNFF 0lCOWtNc0XiYywjKU8iDVQJ2fKdR1h/HfC+k7iObikaogWEAO/4ZdHAGpp06EL+NETov 5cCZXz+VZfmn2HNlBUdmYpcbs+BZCAVNuzq8c+tlxDoRNzlFVLYH38RuRIIJIwCa1Eoo 3BvkaRAC2C4x1E2wepkbPDUMyIulFjOhLSQ/0/yuK1V9LcAAdN1345HbBbx20F05XbS7 g/f/xz4V4t8iYoKGLaJdv6wBBBE1HSApCnM3jUg72JXSw4s6AjaeCNpT2YmRt1Vm/jBN MWuA==
X-Gm-Message-State: AOAM53231nWOpHATomqbZpAjEwuOnsbI070Log+SQyK0N0oTL6zfAfb4 b3aFHrsMP4Flrc8UNtUi8YTPoTH+mfb1WuiZpjRhi6VlS8A=
X-Google-Smtp-Source: ABdhPJyWl6XJAyac44DFzHt+wR+Fp6fYerh6KESGkDj4GH669CcTo9MH7BDb5Ch3DTJG7i7Y5QmgNG8DKQK/QSkI0Sk=
X-Received: by 2002:aca:4fd8:: with SMTP id d207mr1468832oib.82.1627354876437; Mon, 26 Jul 2021 20:01:16 -0700 (PDT)
MIME-Version: 1.0
From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Date: Tue, 27 Jul 2021 12:01:05 +0900
Message-ID: <CAPyZ6=+tCHNGYq0Za38-pju23_d_2wwXbWMgCbJK_Ou8mH3aKQ@mail.gmail.com>
Subject: HTTP/3 server push: handling of lost PUSH_PROMISE
To: IETF QUIC WG <quic@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000556a7e05c81215a3"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/xL43yic8sSnjbofCpEcVYn0RNlw>
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 03:01:20 -0000

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