Re: draft-ietf-httpbis-header-structure: handling multiple field values

Willy Tarreau <w@1wt.eu> Tue, 12 May 2020 21: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 F0AB83A0C1B for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Tue, 12 May 2020 14:38:11 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.649
X-Spam-Level:
X-Spam-Status: No, score=-2.649 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, MAILING_LIST_MULTI=-1, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=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 ZKKfHVAbP7Nv for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Tue, 12 May 2020 14:38:10 -0700 (PDT)
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 5C2E53A0C0A for <httpbisa-archive-bis2Juki@lists.ietf.org>; Tue, 12 May 2020 14:38:10 -0700 (PDT)
Received: from lists by lyra.w3.org with local (Exim 4.92) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1jYcYt-0001rJ-4x for ietf-http-wg-dist@listhub.w3.org; Tue, 12 May 2020 21:35:39 +0000
Resent-Date: Tue, 12 May 2020 21:35:39 +0000
Resent-Message-Id: <E1jYcYt-0001rJ-4x@lyra.w3.org>
Received: from titan.w3.org ([128.30.52.76]) by lyra.w3.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <w@1wt.eu>) id 1jYcYs-0001qS-Cr for ietf-http-wg@listhub.w3.org; Tue, 12 May 2020 21:35:38 +0000
Received: from wtarreau.pck.nerim.net ([62.212.114.60] helo=1wt.eu) by titan.w3.org with esmtp (Exim 4.92) (envelope-from <w@1wt.eu>) id 1jYcYq-0004sM-Kv for ietf-http-wg@w3.org; Tue, 12 May 2020 21:35:38 +0000
Received: (from willy@localhost) by pcw.home.local (8.15.2/8.15.2/Submit) id 04CLZJTj005362; Tue, 12 May 2020 23:35:19 +0200
Date: Tue, 12 May 2020 23:35:19 +0200
From: Willy Tarreau <w@1wt.eu>
To: Poul-Henning Kamp <phk@phk.freebsd.dk>
Cc: Julian Reschke <julian.reschke@gmx.de>, Ian Clelland <iclelland@google.com>, HTTP Working Group <ietf-http-wg@w3.org>
Message-ID: <20200512213519.GB5352@1wt.eu>
References: <f55521dd-e1d3-d925-688c-c472ad67bfb4@gmx.de> <20200512172347.GB4817@1wt.eu> <CAK_TSXJ3o7F9x63MSYyEhr7de0vO1Yu2s8JnjkhT7n4BQiQp+A@mail.gmail.com> <706ee02a-2ecc-6cce-0754-909d6b9f4edd@gmx.de> <CAK_TSXJxex1t32EnfPqYUKhTdqJZFbRf36_FLKJeP2Tqu7RXMg@mail.gmail.com> <4045931b-06b3-9b76-106f-773499b8374b@gmx.de> <11162.1589312096@critter.freebsd.dk> <6121e33e-46d3-e361-9e4e-ad0158a0a8c5@gmx.de> <11779.1589318551@critter.freebsd.dk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <11779.1589318551@critter.freebsd.dk>
User-Agent: Mutt/1.6.1 (2016-04-27)
Received-SPF: pass client-ip=62.212.114.60; envelope-from=w@1wt.eu; helo=1wt.eu
X-W3C-Hub-Spam-Status: No, score=-7.9
X-W3C-Hub-Spam-Report: BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, W3C_AA=-1, W3C_IRA=-1, W3C_IRR=-3, W3C_WL=-1
X-W3C-Scan-Sig: titan.w3.org 1jYcYq-0004sM-Kv f1200e144786cfda2220b25c3f4b7f79
X-Original-To: ietf-http-wg@w3.org
Subject: Re: draft-ietf-httpbis-header-structure: handling multiple field values
Archived-At: <https://www.w3.org/mid/20200512213519.GB5352@1wt.eu>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/37612
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>

On Tue, May 12, 2020 at 09:22:31PM +0000, Poul-Henning Kamp wrote:
> PS: I think your example is wrong, the combined header would be:
> 
>     Foo: "a,b"
> 
> Because there is an important asymmetry in RFC7230/3.2.2.
> 
> A sender is required to know the syntax of the header is a comma
> separated list, before can split the header.
> 
> A receiver on the other hand is under no such obligation, and therefore
> 
>    "...by appending each subsequent field value to
>    the combined field value in order, separated by a comma."
> 
> should be interpreted narrowly:  Only a comma, not whitespace.

Yes it is valid because whitespaces before and after the value are not
part of the value itself, so:

   Foo: b
   Foo:    b

are equivalent, as such you can simply fold using a comma and whatever
number of spaces. I remember a very old discussion where someone suggested
that some limited equipements that must not change the size could replace
the CR with the comma and the LF plus all subsequent chars of the header
field name and the colon with spaces and have it done.

In haproxy we used to replace the CR by comma, the LF with a space,
and memmove the value. Now we're simply folding using <comma> <space>.

Cheers,
Willy