Re: Working Group Last Call: Structured Headers for HTTP

Mark Nottingham <mnot@mnot.net> Sun, 23 February 2020 23:59 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 9942A3A1230 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Sun, 23 Feb 2020 15:59:10 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.75
X-Spam-Level:
X-Spam-Status: No, score=-2.75 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, MAILING_LIST_MULTI=-1, 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=mnot.net header.b=2A1xYUh5; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=O5/1uuzR
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 WnSWr0wisw89 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Sun, 23 Feb 2020 15:59:08 -0800 (PST)
Received: from lyra.w3.org (lyra.w3.org [128.30.52.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id AD0CA3A122F for <httpbisa-archive-bis2Juki@lists.ietf.org>; Sun, 23 Feb 2020 15:59:08 -0800 (PST)
Received: from lists by lyra.w3.org with local (Exim 4.92) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1j616E-0006iA-OF for ietf-http-wg-dist@listhub.w3.org; Sun, 23 Feb 2020 23:55:50 +0000
Resent-Date: Sun, 23 Feb 2020 23:55:50 +0000
Resent-Message-Id: <E1j616E-0006iA-OF@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 <mnot@mnot.net>) id 1j6167-0006hP-Sq for ietf-http-wg@listhub.w3.org; Sun, 23 Feb 2020 23:55:43 +0000
Received: from wout3-smtp.messagingengine.com ([64.147.123.19]) by mimas.w3.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <mnot@mnot.net>) id 1j6165-0008LS-QI for ietf-http-wg@w3.org; Sun, 23 Feb 2020 23:55:43 +0000
Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.west.internal (Postfix) with ESMTP id CDE5B50F; Sun, 23 Feb 2020 18:55:26 -0500 (EST)
Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Sun, 23 Feb 2020 18:55:27 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mnot.net; h= content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; s=fm2; bh=8 lrX7fe6LKtNAqjZ3yNLqyHR6xMf8fvAe2fWT1kGIF8=; b=2A1xYUh54cSoJgK7X Ga953CVI7JTvgFZcTO/t0XuSiDJB5EC537CzmIoj4HtqiVr15a+BmveOXxW3LU7Z owMwTo8pdNF3Rqr+ErpErGxrTnQIWpAJWDrhSijtaiFHcZOYq7jzACZsyLEIY6+X QE7+OZUAhdwLYH3MG3sNhLKTGwjScyWHCbA7GNoqZAiBhqSoKt2MhkweNh8VzCZc L2keHVp0Wf1Wzw4H39SKqFpGRjzd7aPmeotwIo8vgj6vsG4oceR2A3UgvKDvpuDQ q1r7114pcplADZAKnlMxa8a8gK5jhgF7IZVKrGXutlWNfsIQv7zLIMKuHMW9ffSU Sw01w==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding: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=fm2; bh=8lrX7fe6LKtNAqjZ3yNLqyHR6xMf8fvAe2fWT1kGI F8=; b=O5/1uuzRWLwpa10zBdt+TJAWcMUi4XCfbtGSFjcl/0/Y+vDinJd9MMS7e 9RZMZC8Xu66Z4Mp+1S21RS1bNGDyPgXe6D9/lZitKsOwSdxN8hzUyDTg1zXQKTsk V+4TB0vuqPXmuTQGc1zYrxpof7conAMsf20steX4WoQ5DHv5JEPsAKh3pI7tlwbw aNxXYm3ekZ+uyu/0lpOr8hfL+21V4xNVTSpjfLT8tvJziTBWRRRDAesX4EPHRkZQ MLg5E8fJrdBIfwOs8sFs0Pbpe2wGZhYMivcEu/BXzeuMZPM/fdrni82++EZgydG2 GCu7pE1JfCGiYLWPIkuLk3mVoNg2g==
X-ME-Sender: <xms:7RBTXnAVrWQWJ5esGN9e3f9972p8TSo8GDCcuWXwBmDnyIEvVWjVlg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedugedrkeelgddujecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpegtggfuhfgjfffgkfhfvffosehtqhhmtdhhtdejnecuhfhrohhmpeforghrkhcu pfhothhtihhnghhhrghmuceomhhnohhtsehmnhhothdrnhgvtheqnecuffhomhgrihhnpe hgrhgvvghnsgihthgvshdruggvpdhhthhtphhhvggruggvrhhsrghnughtrhgrihhlvghr shdrihhmpdhgihhthhhusgdrtghomhdpmhhnohhtrdhnvghtnecukfhppeduudelrdduje drudehkedrvdehudenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhl fhhrohhmpehmnhhothesmhhnohhtrdhnvght
X-ME-Proxy: <xmx:7RBTXgsREkD9qtt2ar7wzpXhcbHGghr3v35s4jkEX1CVGyIlZr75zw> <xmx:7RBTXus_fz7URfRxQrNpmzKEJ8-UmD6rZCqxzDIoX5ADooPALpBRgw> <xmx:7RBTXkNdBykoBQG5Cnl9Iz01zoTJ5jyA-PnAld_qSTT4caCAFWI_xw> <xmx:7hBTXsr3MdvO9MAmf6rjnyC67nwnCQTIEMnmgFSn3-Qwxa1-7b0rYQ>
Received: from macbook-pro.mnot.net (unknown [119.17.158.251]) by mail.messagingengine.com (Postfix) with ESMTPA id AF67B3280063; Sun, 23 Feb 2020 18:55:22 -0500 (EST)
Content-Type: text/plain; charset="utf-8"
Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\))
From: Mark Nottingham <mnot@mnot.net>
In-Reply-To: <1a733857-e621-2ace-ad9a-1e3d872acf25@gmx.de>
Date: Mon, 24 Feb 2020 10:55:18 +1100
Cc: Tommy Pauly <tpauly@apple.com>, HTTP Working Group <ietf-http-wg@w3.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <3B46D138-971F-4602-8E54-4EE903EA5F24@mnot.net>
References: <C295C393-9602-4D41-9071-30629605E349@apple.com> <1a733857-e621-2ace-ad9a-1e3d872acf25@gmx.de>
To: "Julian F. Reschke" <julian.reschke@gmx.de>
X-Mailer: Apple Mail (2.3608.60.0.2.5)
Received-SPF: pass client-ip=64.147.123.19; envelope-from=mnot@mnot.net; helo=wout3-smtp.messagingengine.com
X-W3C-Hub-Spam-Status: No, score=-9.8
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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, W3C_AA=-1, W3C_DB=-1, W3C_IRA=-1, W3C_IRR=-3, W3C_WL=-1
X-W3C-Scan-Sig: mimas.w3.org 1j6165-0008LS-QI 6ec2e775a084a352203863d287b6077d
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Working Group Last Call: Structured Headers for HTTP
Archived-At: <https://www.w3.org/mid/3B46D138-971F-4602-8E54-4EE903EA5F24@mnot.net>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/37377
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 Julian,

Thanks for the feedback; responses below.

> On 23 Feb 2020, at 5:06 am, Julian Reschke <julian.reschke@gmx.de> wrote:
> 
> On 29.01.2020 18:11, Tommy Pauly wrote:
>> ...
> 
> Below is my (slightly late feedback).
> 
> I was going to ask that the spec to be aligned with the recent
> terminology clarification we did in the core specs (and which are not
> yet published).
> 
> In fact, this is already addressed in the editor's draft, see current
> diffs at
> <https://greenbytes.de/tech/webdav/draft-ietf-httpbis-header-structure-latest-from-previous.diff.html>.
> In encourage all participants to review these changes...
> 
> That said, the title probably should also change from "Structured
> Headers for HTTP" to something like "Structured Field Values for HTTP
> Headers and Trailers".

I'm not against that, although it's quite wordy. Anyone else have thoughts?

> I did not really review the algorithms; this essentially requires
> writing code. I'm not really happy with the statement that in case of
> conflicts, the algorithms have higher precedence than the ABNF.
> 
> 
> Other than that; I found one major issue:
> 
> In 3.3.4:
> 
>  sh-token = ( ALPHA / "\*" ) *( tchar / ":" / "/" )
> 
> This should be
> 
>  sh-token = ( ALPHA / "*" ) *( tchar / ":" / "/" )
> 
> ...right?

Yes; the glories of markdown escaping rules. Fixed.

> Minor issues:
> 
> In Section 1:
> 
> At the end of the section (top level), there should be a paragraph break
> between the two sentences (so that each Section 2, 3, and 4 are treated
> consistently)

Added.

> In Section 1.1:
> 
> "In doing so, uses the VCHAR, SP, DIGIT, ALPHA and DQUOTE rules from
> [RFC5234]. It also includes the tchar rule from [RFC7230]."
> 
> ...should say..: "In doing so, *it* uses..."

Added.

> In Section 2:
> 
> "Specify the type of the header field itself; either Dictionary (Section
> 3.2), List (Section 3.1), or Item (Section 3.3)."
> 
> Maybe sort by section number (swap Dictionary and List)?

Done.

> Further down below it talks about the letter "Q" and the letter 'q'.
> Please make the quoting consistent.

I've done that, and also changed the latter letter to avoid confusion that they are related.

> In the example spec text:
> 
>> "fooUrl" contains a URI-reference (Section 4.1 of
>> [RFC3986], Section 4.1). If its value is not a valid URI-reference,
>> that URL MUST be ignored. If its value is a relative reference
>> (Section 4.2 of [RFC3986]), it MUST be resolved (Section 5 of
>> [RFC3986]) before being used.
> 
> 1. remove ", Section 4.1"

Done.

> 2. use of "URL" comes as as surprise here, maybe just say "field value"

The intent is to ignore the individual URL, not the entire field value.

> In Section 3.1.1:
> 
> "In HTTP headers, inner lists..." - I was going to say that this seems
> to be unnecessary verbose (here and in other places), but this has
> already been fixed in the latest editor's draft.

Ack.

> In Section 3.1.2:
> 
> ABNF:
> 
> parameter     = ";" *SP param-name [ "=" param-value ]
> 
> Prose:
> 
> "...parameters are separated from their item or inner-list and each
> other by semicolons."
> 
> So there's an unfortunate mismatch between the ABNF production
> "parameter" (which already includes the ";") and the use of "parameter"
> in the prose. Maybe worth addressing in the ABNF.

Please take a look at
  https://github.com/httpwg/http-extensions/commit/b4b8f4a73

> In Section 3.2:
> 
>> Members whose value is Boolean true MUST omit that value when serialised, unless it has parameters. For example, here both “b” and “c” are true, but “c”’s value is serialised because it has parameters:
>> 
>> Example-DictHeader: a=?0, b, c=?1; foo=bar
> 
> I guess this is needed in order to avoid ambiguities, but this outcome
> is really a bit strange. Is there a summary of how we got to that
> special case somewhere (github issue?)

https://github.com/httpwg/http-extensions/issues/992

> In Section 3.3:
> 
>> An item is can be a integer (Section 3.3.1), decimal (Section 3.3.2), string (Section 3.3.3), token (Section 3.3.4), byte sequence (Section 3.3.5), or Boolean (Section 3.3.6).
> 
> Please be consistent in upper/lowercasing...

Boolean refers to a person's name; lowercasing it would be equivalent to saying that your review is reschkean, not Reschkean. Or are you suggesting we uppercase all of them (which might be reasonable, given the next comment)?

> In Section 3.3.2:
> 
>> Decimals are numbers with an integer and a fractional component. The Integer component has at most 12 digits; the fractional component has at most three digits.
> 
> Same here.

Uppercase is used to refer to the SH-type; lowercase is referring to mathematical concepts.

> In Section 4.1:
> 
> Item 2 and 3 should be swapped (to reflect the order of the definitions
> in the spec).

OK, done.

> Item 5 seems to be unreachable by definition.

If for some reasons serialise is handed a value that doesn't match one of the above (or can't be identified as such), it needs to fail.

> In Section 4.1.3:
> 
> Section references in the list should be wrapped in "(" and ")"

Done (one case)

> In Section 5:
> 
> s/draft/specification/ or "document"

Done.

> Appendix A:
> 
> Acknowledgements should be in a unnumbered appendix at the end.
> 
> That said, is mentioning exactly one WG member the right thing here?

Good point. I've added a number of folks who contributed according to Github; if others feel that they were involved to a significant degree, please ping me (privately if you wish).

I've continued to single Matthew out because his contribution was considerably greater than anyone else's.

> Appendix C:
> 
>> A generic implementation of this specification should expose the top-level parse (Section 4.2) and serialize (Section 4.1) functions
> 
> Maybe swap the two parts (Sections mentioned in reverse order really
> trip me up)

Swapped.

Thanks again,

--
Mark Nottingham   https://www.mnot.net/