Re: Failing Parameter in Key Header

Mark Nottingham <mnot@mnot.net> Mon, 06 June 2016 01:47 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 A8C2412D189 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Sun, 5 Jun 2016 18:47:26 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8.347
X-Spam-Level:
X-Spam-Status: No, score=-8.347 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.426, 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 mTQaKvv-n_5a for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Sun, 5 Jun 2016 18:47:24 -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 27B8B12D0C7 for <httpbisa-archive-bis2Juki@lists.ietf.org>; Sun, 5 Jun 2016 18:47:23 -0700 (PDT)
Received: from lists by frink.w3.org with local (Exim 4.80) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1b9jZB-0001Ui-2p for ietf-http-wg-dist@listhub.w3.org; Mon, 06 Jun 2016 01:42:57 +0000
Resent-Date: Mon, 06 Jun 2016 01:42:57 +0000
Resent-Message-Id: <E1b9jZB-0001Ui-2p@frink.w3.org>
Received: from lisa.w3.org ([128.30.52.41]) by frink.w3.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <mnot@mnot.net>) id 1b9jZ3-0001T9-1b for ietf-http-wg@listhub.w3.org; Mon, 06 Jun 2016 01:42:49 +0000
Received: from mxout-07.mxes.net ([216.86.168.182]) by lisa.w3.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from <mnot@mnot.net>) id 1b9jZ0-0000jG-7y for ietf-http-wg@w3.org; Mon, 06 Jun 2016 01:42:48 +0000
Received: from [192.168.1.101] (unknown [120.149.194.112]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.mxes.net (Postfix) with ESMTPSA id 8A7F322E253; Sun, 5 Jun 2016 21:42:21 -0400 (EDT)
Content-Type: text/plain; charset="utf-8"
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
From: Mark Nottingham <mnot@mnot.net>
In-Reply-To: <46EE7A37651F404F8B5F497D3BA1481499BD0A23@AUSP01DAG0109.collaborationhost.net>
Date: Mon, 06 Jun 2016 11:42:18 +1000
Cc: "ietf-http-wg@w3.org" <ietf-http-wg@w3.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <020DCA4A-B9B1-423E-AD58-445E264642C7@mnot.net>
References: <46EE7A37651F404F8B5F497D3BA1481499BD0A23@AUSP01DAG0109.collaborationhost.net>
To: Paul Mansour <paul@carlislegroup.com>
X-Mailer: Apple Mail (2.3124)
Received-SPF: pass client-ip=216.86.168.182; envelope-from=mnot@mnot.net; helo=mxout-07.mxes.net
X-W3C-Hub-Spam-Status: No, score=-8.2
X-W3C-Hub-Spam-Report: AWL=1.357, BAYES_00=-1.9, 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: lisa.w3.org 1b9jZ0-0000jG-7y 34cb1b292a39b8db8ca3a6a7319bc793
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Failing Parameter in Key Header
Archived-At: <http://www.w3.org/mid/020DCA4A-B9B1-423E-AD58-445E264642C7@mnot.net>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/31705
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>

Hi Paul,


> On 30 May 2016, at 11:07 AM, Paul Mansour <paul@carlislegroup.com> wrote:
> 
> I am trying to implement the Key header (from https://tools.ietf.org/html/draft-ietf-httpbis-key-01) and have a question regarding “fail parameter processing”.   I apologize in advance if this question is best for another forum. The Key header does not appear to be widely discussed yet, so I thought this might be the right place.

Very much so.

 
> Why is a key-item with zero parameters treated as a “failing parameter” (going to section 2.2.2) when calculating a secondary cache key?  I would have thought that at step 5, sub-step 2, it would read something like:
>   
> …append “field-value” (or a normalized version of it) to “secondary-key” (and go to next key item)
>  
> In other words, if there are zero parameters for a key-item, simply append the value of the header field to the secondary-key and then move on to the next key-item. In all other cases when building the cache key, there is an actual error in the parameter (no = sign, bad parameter name, etc.). In the case of zero parameters, it is not really an error, as the spec explicitly allows for zero or more parameters.

The spec uses "fail' to mean "fall back to normal Vary processing". One way to achieve that would be to append the request header's value to the secondary key, but specifying it that way would block the implementation from making Vary-specific optimisations (e.g., trimming whitespace, using knowledge of the request header to canonicalise it). 

I agree we could make this more clear, though.


>  In addition, and related, and I think more important, it is unclear to me whether or not each key item stands on its own if there is a failing parameter (or as it stands, no parameters) in one of them. In the step-by-step algorithm it seems to indicate that they are independent, as in case of error the instruction is to move on to the next key-item (after handling the error). But in the failing parameter processing section 2.2.2 it seems to indicate that if there is a single failing parameter, the entire Key header should be ignored (falling back to Vary I assume) or that all of the “nominated header fields being compared match” which is the same as treating the Key header as a Vary header with no parameters for any nominated header field. In either case, one failing parameter in one key-item appear to void all parameters in all key-items.

Good question. I think we need to clarify this text in 2.2.2:

"""
When this happens, implementations MUST either behave as if the Key header was not present, or assure that the nominated header fields being compared match, as per [RFC7234], Section 4.1.
"""

to something like:

"""
When this happens, implementations MUST either behave as if the whole Key header was not present (i.e., abort processing of Key, ignoring it entirely and falling back to Vary), or assure that the nominated header fields being compared match, as per [RFC7234], Section 4.1 (i.e., treat the failing portion of the Key header as falling back to Vary, but continuing to process other parts).
"""

Would that help?


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