Re: Draft v1 Update for Resumable Uploads

Lucas Pardue <lucaspardue.24.7@gmail.com> Mon, 20 June 2022 02:44 UTC

Return-Path: <ietf-http-wg-request+bounce-httpbisa-archive-bis2juki=lists.ie@listhub.w3.org>
X-Original-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Delivered-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9E859C157B35 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Sun, 19 Jun 2022 19:44:34 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.76
X-Spam-Level:
X-Spam-Status: No, score=-2.76 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.25, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01] 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 ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id aAe84XUFwGqX for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Sun, 19 Jun 2022 19:44:30 -0700 (PDT)
Received: from lyra.w3.org (lyra.w3.org [128.30.52.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 3A94FC157B33 for <httpbisa-archive-bis2Juki@lists.ietf.org>; Sun, 19 Jun 2022 19:44:29 -0700 (PDT)
Received: from lists by lyra.w3.org with local (Exim 4.92) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1o37M0-0000ra-72 for ietf-http-wg-dist@listhub.w3.org; Mon, 20 Jun 2022 02:41:28 +0000
Resent-Date: Mon, 20 Jun 2022 02:41:28 +0000
Resent-Message-Id: <E1o37M0-0000ra-72@lyra.w3.org>
Received: from mimas.w3.org ([128.30.52.79]) by lyra.w3.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <lucaspardue.24.7@gmail.com>) id 1o37Lz-0000qe-7Q for ietf-http-wg@listhub.w3.org; Mon, 20 Jun 2022 02:41:27 +0000
Received: from mail-qv1-xf2c.google.com ([2607:f8b0:4864:20::f2c]) by mimas.w3.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from <lucaspardue.24.7@gmail.com>) id 1o37Ly-0014b8-3l for ietf-http-wg@w3.org; Mon, 20 Jun 2022 02:41:26 +0000
Received: by mail-qv1-xf2c.google.com with SMTP id 88so10720834qva.9 for <ietf-http-wg@w3.org>; Sun, 19 Jun 2022 19:41:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=KCjukGYZ7GqSEtfWSjaJq0JMhpqo5VegftnN5PcDHgU=; b=QUsxiV/4+xvn9fyauftP8aOsfc/f0GJsD+pxLMCLw+qHb1xVJVPjFvfclF95jsvOkl QCquhvWDMmgv4kW3t8exGZXZkSJUPLzVQ1IsrmmnYe7WPPk+XDl+vCoQkKJe4pKKc7eP QsdKqq1CDqpsZTEHVyLPUQPERKHLPd7JYcsPv70qbX6b2rz5dgrnelqAGk14WHkDZTYD ipY5nckrj31VoQ19CHtcNFVHpkDkQw4vZQY1vNrIjxpQZ+QuCN03ZTrADtH90+fRxfp2 vWvCL3v95e/vlv9n0wDOPbYx6AJihKSy6n3Wfmz0aZUW6h8vJws0IywSRwLjHM/2mKjE D0/g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=KCjukGYZ7GqSEtfWSjaJq0JMhpqo5VegftnN5PcDHgU=; b=xex8ekkkVxUdjCcQufCaJwO6zPzY3ElAZNCUMpHu1DeD4FnMPCalQz+XSIsatYV2Ty EWpCJjIk59UBAB6kGiTTYDMCpxD5EMzUrVMebRpJ5zwbTB+LMhgtEtDBmHhdtk/Cctwd QKrBEIqm7l0ah/8Zjg45RdghASvsLQpyU/FVbp94zv9rBGiNtdD/6KbBeZp9ciBzMFYP l+PDurYQseUEFxHflfq3jiT4DbkGS45kRAvoqqHQi4W3JyBd+KJ6IuBJwQ09PMysKKCF ZsrKV6FIDhyQqNDYKz1tdsOtEeY0u4zZ7QfvoKQJaxXQ31pInWSpd1gfCP/TKyr8yzjH nFdA==
X-Gm-Message-State: AJIora8MTG3h5rBCySM7yxjctmLfbRIlpptVJzvnLGHJoRi5UikTbNrA UomqXdHDeaSLNxDzDAOZgGuX8CNc3YeUwHBr5B09RkdgFu4=
X-Google-Smtp-Source: AGRyM1tEJ824qODrDNjOAZna00ap4lQ91rQcA+Qs+iXVS2JmL29TV64awZY+jwalv3ZM3wWMxJE8ujdd1Ks9Nglq7bg=
X-Received: by 2002:ac8:5ac5:0:b0:304:fa16:1227 with SMTP id d5-20020ac85ac5000000b00304fa161227mr17700458qtd.37.1655692873860; Sun, 19 Jun 2022 19:41:13 -0700 (PDT)
MIME-Version: 1.0
References: <BED5A5BC-3F7F-47E2-815E-DC0483328DFD@apple.com> <Yq67WGkb0LtJIAP9@xps13> <CALGR9oa-zUTL4z_jrzvknBOoeYoksT-mPgz3m3ddUFzBZZ6khg@mail.gmail.com> <Yq/VYMe+VUDdnY1c@xps13>
In-Reply-To: <Yq/VYMe+VUDdnY1c@xps13>
From: Lucas Pardue <lucaspardue.24.7@gmail.com>
Date: Mon, 20 Jun 2022 03:41:02 +0100
Message-ID: <CALGR9oamykn+QbTG89ELMLCuHHdP=PEod_jgJ7-6JgJivnNhKA@mail.gmail.com>
To: Glenn Strauss <gs-lists-ietf-http-wg@gluelogic.com>
Cc: Guoye Zhang <guoye_zhang@apple.com>, HTTP Working Group <ietf-http-wg@w3.org>
Content-Type: multipart/alternative; boundary="0000000000009a89e205e1d809be"
Received-SPF: pass client-ip=2607:f8b0:4864:20::f2c; envelope-from=lucaspardue.24.7@gmail.com; helo=mail-qv1-xf2c.google.com
X-W3C-Hub-DKIM-Status: validation passed: (address=lucaspardue.24.7@gmail.com domain=gmail.com), signature is good
X-W3C-Hub-Spam-Status: No, score=-4.9
X-W3C-Hub-Spam-Report: BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, W3C_AA=-1, W3C_IRA=-1, W3C_WL=-1
X-W3C-Scan-Sig: mimas.w3.org 1o37Ly-0014b8-3l c21ae30f7da5dfe9d834905f01ea4ff8
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Draft v1 Update for Resumable Uploads
Archived-At: <https://www.w3.org/mid/CALGR9oamykn+QbTG89ELMLCuHHdP=PEod_jgJ7-6JgJivnNhKA@mail.gmail.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/40173
X-Loop: ietf-http-wg@w3.org
Resent-Sender: ietf-http-wg-request@w3.org
Precedence: list
List-Id: <ietf-http-wg.w3.org>
List-Help: <https://www.w3.org/Mail/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>

Hi Glenn,

Responding in line:

On Mon, Jun 20, 2022 at 3:03 AM Glenn Strauss <
gs-lists-ietf-http-wg@gluelogic.com> wrote:

> On Sun, Jun 19, 2022 at 04:52:58PM +0100, Lucas Pardue wrote:
> > Hi Glenn,
> >
> > I'd like to respond to one aspectdirectly:
> >
> > On Sun, Jun 19, 2022 at 7:04 AM <gs-lists-ietf-http-wg@gluelogic.com>
> wrote:
> >
> > > On Thu, Jun 16, 2022 at 02:30:59PM -0700, Guoye Zhang wrote:
> > > > Our previous resumable upload draft generated a lot of discussions.
> > >
> > > At least in my case, I attempted to be polite after you submitted a
> > > draft without first doing a survey of existing RFCs.  You admitted no
> > > knowledge of WebDAV RFCs, which I deemed a large oversight considering
> > > the nature of the tus-v2 protocol.
> > >
> > > > I’m glad to announce that we have a new draft ready to address many
> > > feedbacks that suggested adopting the PATCH method.
> > >
> > > The draft abstract begins with unsubstantiated claims to justify
> itself,
> > > and I believe that almost all of those claims are also misleading.
> > >
> > > "HTTP clients often encounter interrupted data transfers as a result of
> > > canceled requests or dropped connections. [...] it is often desirable
> to
> > > issue subsequent requests that transfer only the remainder of the
> > > representation."
> > >
> > > The multiple uses of "often" are misrepresentations, IMHO.
> > >
> > > A large percentage of HTTP requests are GET/HEAD and have no body.
> > > A sizable percentage (if not more) of HTTP POST requests are small,
> > > e.g. using POST as an alternative to GET along with XSRF tokens.
> > >
> > > What data do you have to support the claims in the draft Abstract?
> > > What percentage of requests have request bodies, and further have
> > > request bodies that are sufficiently large that it is excessively
> > > wasteful to resend the entire representation? (and when safe to do so!)
> > >
> >
> > The text you quote from the tus v2 draft is based on an almost verbatim
> > section of text from RFC 9110 Section 14 [1], which describes Range
> > Requests. Quote:
> >
> > > Clients often encounter interrupted data transfers as a result of
> > canceled requests or dropped connections. When a client has stored a
> > partial representation, it is desirable to request the remainder of that
> > representation in a subsequent request rather than transfer the entire
> > representation.
>
> In RFC 9110, that paragraph *immediately* follows the heading "Range
> Requests".  In that context, "Clients often encounter interrupted data
> transfers" implicitly refers to downloads, as described in the section.
>

RFC 9110 Section 14.5 also includes information about uploads wrt partial
PUT, which was motivated by discussion of use cases in
https://github.com/httpwg/http-core/issues/618 and survey of approached in
https://lists.w3.org/Archives/Public/ietf-http-wg/2020OctDec/0285.html

So while I see the logic, I don't think it's fair to assume that RFC 9110
is only about downloads.


> On the other hand, when quoted in the Abstract of the tus draft titled
> "tus - Resumable Uploads Protocol", I mistook that to refer to uploads.
> Hence, I found the statements misleading, since "interrupted data
> transfers" is ambiguous and could refer to downloads or uploads.
>

When failures happen on a connection, they'll affect an upload flow just as
much as a download one. But I take the point that the document title in
combination with the opening sentence could be misinterpreted. A better way
would be to present what is supported today, present the capability gap,
and talk about the goal of the draft. Subsequent versions of a document
could even drop the exposition and focus on the specification protocol
details, should the WG manage to get so far.


> > I wrote the tus v2 text to explicity juxtapose resumable HTTP downloads
> > against uploads. To quote the abstract in full:
> >
> > > HTTP clients often encounter interrupted data transfers as a result
> >    of canceled requests or dropped connections.  Prior to interruption,
> >    part of a representation may have been exchanged.  To complete the
> >    data transfer of the entire representation, it is often desirable to
> >    issue subsequent requests that transfer only the remainder of the
> >    representation.  HTTP range requests support this concept of
> >    resumable downloads from server to client.  This document describes a
> >    mechanism that supports resumable uploads from client to server using
> >    HTTP.
>
> When a client uses an idempotent HTTP request method, such as GET, then
> the client may repeat a disconnected request, and may attempt to utilize
> a Range request.
>
> When a client is providing a request body upload with a non-idempotent
> method, such as POST or PUT, then the request is not necessarily safe to
> repeat.  Appropriate behavior to attempt to recover may be
> application-specific.
>
> I want to emphasize: **application-specific**
>
> Hence, I still think that Abstract is misleading and an inaccurate
> attempt to convey equivalence between client download using an
> idempotent method, and client upload using a non-idempotent method.
> They are not equivalent; there are very important distinctions that
> should be explicitly stated before trying to describe similarities.
>

I see Guoye has also responded about automatic retries. But are a chain of
GET range requests really retries, or are they simply a sequence of related
requests with different byte ranges?


> > A different reading is that,
> > having seen multiple HTTP-based custom resumable upload approaches from
> > different vendors, there is an unaddressed use case.
>
> I do agree with the sentiment, just not the proposed solution.
>
> > Hence it is not seldom
> > that for applicaitons that feature uploads, resumption is desirable.
>
> Again:
> upload recovery is **application-specific** with a non-idempotent method
> (automatic retrying by a client is not generically or universally safe)
>
> "tus - Resumable Uploads Protocol" is application-specific as I read it.
> I think the draft should proceed to describe an application-specific
> protocol and should severely scale back its attempt to generically
> extend HTTP for resumable uploads.
>

Thanks for these comments. Speaking to both points, if there were a
different form of solution would you feel it could be less
application-specific? I think that would be a good thing for the WG to try
and come to some answer on; is this a problem that can ever be solved in
HTTP or not.

Cheers
Lucas