Re: New Version Notification for draft-kazuho-early-hints-status-code-00.txt

Julian Reschke <julian.reschke@gmx.de> Mon, 31 October 2016 18:38 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 85C1E1299DE for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Mon, 31 Oct 2016 11:38:09 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8.398
X-Spam-Level:
X-Spam-Status: No, score=-8.398 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-1.497, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
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 MM8UM1DZdPEg for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Mon, 31 Oct 2016 11:38:08 -0700 (PDT)
Received: from frink.w3.org (frink.w3.org [128.30.52.56]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id BB42A1299E2 for <httpbisa-archive-bis2Juki@lists.ietf.org>; Mon, 31 Oct 2016 11:37:55 -0700 (PDT)
Received: from lists by frink.w3.org with local (Exim 4.80) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1c1HOM-00069x-01 for ietf-http-wg-dist@listhub.w3.org; Mon, 31 Oct 2016 18:33:06 +0000
Resent-Date: Mon, 31 Oct 2016 18:33:05 +0000
Resent-Message-Id: <E1c1HOM-00069x-01@frink.w3.org>
Received: from mimas.w3.org ([128.30.52.79]) by frink.w3.org with esmtps (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <julian.reschke@gmx.de>) id 1c1HOG-00067O-U2 for ietf-http-wg@listhub.w3.org; Mon, 31 Oct 2016 18:33:00 +0000
Received: from mout.gmx.net ([212.227.15.18]) by mimas.w3.org with esmtps (TLS1.2:DHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <julian.reschke@gmx.de>) id 1c1HOA-0007CO-IZ for ietf-http-wg@w3.org; Mon, 31 Oct 2016 18:32:55 +0000
Received: from [192.168.178.20] ([93.217.85.249]) by mail.gmx.com (mrgmx002) with ESMTPSA (Nemesis) id 0MJSLz-1c2e1Z0q55-0034Kl; Mon, 31 Oct 2016 19:32:26 +0100
To: Cory Benfield <cory@lukasa.co.uk>, Kazuho Oku <kazuhooku@gmail.com>
References: <147792294052.32397.15544665152412530374.idtracker@ietfa.amsl.com> <CANatvzwm_T-HW0yT1MAWEUrfw5OAVkmAZe890575qg8HuU9Z_Q@mail.gmail.com> <86447165-100C-407D-8512-A32F93B11BBA@lukasa.co.uk>
Cc: HTTP Working Group <ietf-http-wg@w3.org>
From: Julian Reschke <julian.reschke@gmx.de>
Message-ID: <36bf4c55-e942-5a95-bb02-eda52297a7fa@gmx.de>
Date: Mon, 31 Oct 2016 19:32:26 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0
MIME-Version: 1.0
In-Reply-To: <86447165-100C-407D-8512-A32F93B11BBA@lukasa.co.uk>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: 8bit
X-Provags-ID: V03:K0:E/GqoC8A8y81LBSjsnu/bvNRH+M68OHFCDalhF4YLPu++FBbcbe nFJKQyIu78O3+xhNO4B3ePm8BJaMRIIFoWiAyLq+lO5T+C8jT52yR3iLkJfSyp4toHLa7Jw a10wEqKiaPk+Ne4ymMwFOAcq3l+68gd/A4qNkIwVB0tBRXe+p4nGpW8Ca/xSqa1AwWEnYqQ 9yUx1v4fVFD++N5Zsi2bQ==
X-UI-Out-Filterresults: notjunk:1;V01:K0:RntRpKg5VXU=:kErr5kCD/U6BZmJWlCodpo 4L37gS4j1wmzbZArrpOfVweAMGbFKCnmBdbM/ddmXzm8qbIAooDIDlWITTScww8u6Cd4482iW lk6tlvEcLgl1eDXXhTLnXmoQwe2QSwWcqBv/TmIsKyam+F1/HsYqnNuWdjUbNhhpzri6BTbCy wq1I8tK3/FtU26myjbtY9CC6VkGwiLkWlsMOZ5Re2tu9RHRjoB/+VpY9PIAR5pIn93gSfkLBe Z+gGmJ1FOgoMa4aVXBVU0gHjxoA4Gjaw6wiIz+aKaeOzSTK6Vy33I0wuhbGWcu+u4ri0zVNOd S615eqsV2vbB5Q8haiPeAdYFQQKDUxvdKvJuly1Gu+yWnqrK19uX1Rq5/EP8wfW4ztXco/Qv8 PDIxzorVoHJ2K8c9ldQLuOcfMvy9AXiYODLa0EBaaxrGeKNsU4T9sVz1vDAwag+8ZSmvfbtoS +87lmRKNAVWKOI1T4sRMd4Aw6d7XMes7L/B7ALlXCv4sa7YaLdnntCyEpCJUrt9/1LHXXbXsp a0fqC01q7Yf/3/ToSGNvZ/jx84Y03lFuiq255SEnWbmmLykauvi/fRDWQBi/AlWA2Anzdd8Xh b7PbcGB9mw9CONrty4R45BZtpkeyT+7JO/RovHIUtIaFsJwGmVKFojklsYHAh+sjnHEmiEMmG KtQV/qy16gSrcHhUE6VLyDb2J/3fBp8nm9JeMQTYuVtcm2tT5+bk46cdhLxrPfOERBs8nCwCu AGYOZ0hHZjRQxjq6JHrLG21ARD+4bDgEWUiW8n3LVjmLpK4MsCNicdZEp6Vck4WtBHbcwQj5L 5QzQWrP
Received-SPF: pass client-ip=212.227.15.18; envelope-from=julian.reschke@gmx.de; helo=mout.gmx.net
X-W3C-Hub-Spam-Status: No, score=-6.7
X-W3C-Hub-Spam-Report: AWL=-0.058, BAYES_00=-1.9, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, W3C_AA=-1, W3C_DB=-1, W3C_IRA=-1, W3C_WL=-1
X-W3C-Scan-Sig: mimas.w3.org 1c1HOA-0007CO-IZ bbc73951605326be37231d6d1d664a89
X-Original-To: ietf-http-wg@w3.org
Subject: Re: New Version Notification for draft-kazuho-early-hints-status-code-00.txt
Archived-At: <http://www.w3.org/mid/36bf4c55-e942-5a95-bb02-eda52297a7fa@gmx.de>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/32759
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: <http://www.w3.org/Mail/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>

On 2016-10-31 19:21, Cory Benfield wrote:
>
>> On 31 Oct 2016, at 14:25, Kazuho Oku <kazuhooku@gmail.com> wrote:
>>
>> The draft proposes a new _informational_ status code that can be used
>> for indicating hints to help a client start making preparations for
>> processing the final response, while the server struggles to build the
>> final response.
>>
>> Actually, we already have a working implementation. H2O, our HTTP/2
>> server, recognizes Link: rel=preload headers within an informational
>> response sent from upstream, and tries to push the specified resource.
>> One reason I decided to write this draft is because I believe it would
>> be better to standardize the mechanism.
>
> Kazuho,
>
> This draft generally seems like a really good idea. It helps to resolve some of the substantial issues around the processing of large or high-latency responses, and as you have identified seems like it would make a good companion to HTTP/2 server push. I think this is a draft worth pursuing, and though I will not be at the next IETF meeting I look forward to seeing the progress through the IETF.
>
> While I’m here, I’d like to discuss section 3. To provide some data points, most of the HTTP/1.1 clients in the Python ecosystem will not handle a new 1XX status code very well. A quick survey of the ecosystem suggests that the following tools will all misbehave:
>
> - every standard library http client (urllib, urllib2, httplib), all of which treat only “100 Continue” specially: the rest will treat the 103 header block as the final response and, because it MUST NOT have a content-length, will read until connection close.
> - every third-party library built on top of those tools, including urllib3, Requests, and httplib2, which inherit their misbehaviour.
> - aiohttp, which special-cases 100 and 101 but not any others
> - Twisted’s client, which special-cases 100
>
> In fact, so far I haven’t found a single Python http client that would handle this response in any way that approaches sensible. I would even tolerating *ignoring* the response as a sensible behaviour, but we don’t even have that. In all cases, these clients treat the 103 response as the final response and totally lose track of their framing.
>
> I doubt Python is unique here. While other languages may have libraries that are somewhat better at handling this situation, certainly some-to-many of them will continue to have this problem. This problem is also likely to be present throughout the long-tail of HTTP implementations: clearly it has been received wisdom by implementers that non-100 1XX status codes do not need to be supported because they will not be encountered. Worse, many of these implementations may be unable to update. Even if Python’s standard library http.client library was fixed to handle 1XX codes sensibly, the most widely-deployed version of Python (2.7) would not receive any such fix, meaning that all Python 2.7 users would be utterly confused by the receipt of a 103 status code.
>
> This means that your suggestion that this should be negotiated is extremely important. I think it’s not “desirable” to negotiate this behaviour: I think it’ll have to be mandatory if we want to avoid screwing up a majority of long-tail HTTP/1.1 clients in the world. For HTTP/1.1, that’ll have to be negotiation by header, presumably by means of either an extension to the “Expect” header field or an equivalent header field that is inserted by analogy. For HTTP/2 this could be negotiated at the connection level by means of a settings value, or by the same header at the cost of one byte per request.

Or "Prefer".

> I’ll start filing bugs against relevant repositories to address this behaviour so that the Python ecosystem is less embarrassingly unprepared for further 1XX status codes, but in the short-to-medium term it would be much better if we could negotiate the 103 status code rather than assume it will function correctly.

Please, by all means, *do* file bug reports.

Best regards, Julian