Re: How to express no matching results in HTTP SEARH method?

"Roy T. Fielding" <fielding@gbiv.com> Thu, 05 November 2020 20:48 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 790BF3A1A39 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Thu, 5 Nov 2020 12:48:54 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.748
X-Spam-Level:
X-Spam-Status: No, score=-2.748 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, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=gbiv.com
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 Z2VuHLaPmYHM for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Thu, 5 Nov 2020 12:48:52 -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 C46C53A1A37 for <httpbisa-archive-bis2Juki@lists.ietf.org>; Thu, 5 Nov 2020 12:48:52 -0800 (PST)
Received: from lists by lyra.w3.org with local (Exim 4.92) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1kam9H-0007cH-QF for ietf-http-wg-dist@listhub.w3.org; Thu, 05 Nov 2020 20:46:24 +0000
Resent-Date: Thu, 05 Nov 2020 20:46:23 +0000
Resent-Message-Id: <E1kam9H-0007cH-QF@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 <fielding@gbiv.com>) id 1kam9G-0007bW-KQ for ietf-http-wg@listhub.w3.org; Thu, 05 Nov 2020 20:46:22 +0000
Received: from bumble.maple.relay.mailchannels.net ([23.83.214.25]) by mimas.w3.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <fielding@gbiv.com>) id 1kam9E-0005M3-QA for ietf-http-wg@w3.org; Thu, 05 Nov 2020 20:46:22 +0000
X-Sender-Id: dreamhost|x-authsender|fielding@gbiv.com
Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 3F22C70057D; Thu, 5 Nov 2020 20:46:08 +0000 (UTC)
Received: from pdx1-sub0-mail-a17.g.dreamhost.com (100-96-22-112.trex.outbound.svc.cluster.local [100.96.22.112]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 46E4A700313; Thu, 5 Nov 2020 20:46:07 +0000 (UTC)
X-Sender-Id: dreamhost|x-authsender|fielding@gbiv.com
Received: from pdx1-sub0-mail-a17.g.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384) by 0.0.0.0:2500 (trex/5.18.10); Thu, 05 Nov 2020 20:46:08 +0000
X-MC-Relay: Neutral
X-MailChannels-SenderId: dreamhost|x-authsender|fielding@gbiv.com
X-MailChannels-Auth-Id: dreamhost
X-Decisive-Power: 553e9ec16542c008_1604609167785_2243770524
X-MC-Loop-Signature: 1604609167784:1093502281
X-MC-Ingress-Time: 1604609167784
Received: from pdx1-sub0-mail-a17.g.dreamhost.com (localhost [127.0.0.1]) by pdx1-sub0-mail-a17.g.dreamhost.com (Postfix) with ESMTP id 0CB027ED97; Thu, 5 Nov 2020 12:46:07 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gbiv.com; h=content-type :mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; s=gbiv.com; bh=lR06XdsH9Cr3uepM+ZVaT0/qDw0=; b=tpIHVq8w8kx75WxCe/XzdRjsfxUr r/3xV8i0U71QaNOm3Q5L41r4PSjK7GMPpI31b/qI94ItFbSImnU3K/DUIGdAjyOH LIOXXEUlbvqCY77G0BUkTlviv11wY4VEol82wnPtjuiB7dr8KVmUIrSeyp/YLXZH SlSWeJ9zZ4gUyK4=
Received: from [192.168.1.10] (ip68-101-102-139.oc.oc.cox.net [68.101.102.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: fielding@gbiv.com) by pdx1-sub0-mail-a17.g.dreamhost.com (Postfix) with ESMTPSA id B74E17ED9B; Thu, 5 Nov 2020 12:46:02 -0800 (PST)
Content-Type: text/plain; charset="us-ascii"
Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.17\))
X-DH-BACKEND: pdx1-sub0-mail-a17
From: "Roy T. Fielding" <fielding@gbiv.com>
In-Reply-To: <CH2PR22MB20861A3757E53A0AF992F61EDAEE0@CH2PR22MB2086.namprd22.prod.outlook.com>
Date: Thu, 05 Nov 2020 12:46:01 -0800
Cc: Ben Schwartz <bemasc@google.com>, Stephane Bortzmeyer <bortzmeyer@nic.fr>, Sawood Alam <ibnesayeed@gmail.com>, Julian Reschke <julian.reschke@gmx.de>, ietf-http-wg <ietf-http-wg@w3.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <272262AB-8566-413F-87BB-863EC60CAF0B@gbiv.com>
References: <CALOnmf-e24a=9ScKg3M==cSpG8TMd1JnMiecWgUMtD0a17xRgA@mail.gmail.com> <a599a2ba-ad97-b87d-6762-422cde1c1a41@gmx.de> <CALOnmf9fphWhDE+AceBduMKEx6qNFUeVtcZ-nVyVeTs_hOp=RQ@mail.gmail.com> <20201105110635.GA9397@sources.org> <0B420CEF-BE1D-4FCF-B205-B64CC99568C2@gbiv.com> <CAHbrMsArA6j8_q-GXkbgdu9uCBBOMdrr6gRSV=-K68NUoXyi4w@mail.gmail.com> <58400266-E730-473E-A1E4-B6894F9C02D9@gbiv.com> <CH2PR22MB20861A3757E53A0AF992F61EDAEE0@CH2PR22MB2086.namprd22.prod.outlook.com>
To: Mike Bishop <mbishop@evequefou.be>
X-Mailer: Apple Mail (2.3445.104.17)
Received-SPF: pass client-ip=23.83.214.25; envelope-from=fielding@gbiv.com; helo=bumble.maple.relay.mailchannels.net
X-W3C-Hub-Spam-Status: No, score=-6.1
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_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=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 1kam9E-0005M3-QA 362c81dd11c918b26f917d5415bcd5d2
X-Original-To: ietf-http-wg@w3.org
Subject: Re: How to express no matching results in HTTP SEARH method?
Archived-At: <https://www.w3.org/mid/272262AB-8566-413F-87BB-863EC60CAF0B@gbiv.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/38190
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 Nov 5, 2020, at 11:37 AM, Mike Bishop <mbishop@evequefou.be> wrote:
> 
> Roy, you seem to be disagreeing, but then presenting a detailed argument for
> the same position you're disagreeing with.  If the search was successfully
> performed on a resource, and the result of the search is an empty set,
> that's a successful operation (2XX).  If the search could not be performed
> for some reason, that's an error (4XX, 5XX).

That wasn't what I was responding to. The example given was a response
that was not a successful search: "SERVFAIL or NXDOMAIN" having a status
of 2xx. That's wrong.

> I'm confused.  Can you clarify why you don't believe that aligns with "if a
> search is successfully performed, then HTTP has succeeded"?

The general statement of "when a search is successfully performed we
would expect a 2xx response" is true to the extent that what the
application is actually doing is searching for something wherein
"none found" is a successful response, like most queries that
respond with a list of resources that match.

But SEARCH (the method) isn't limited to searching for something
according to some criteria. Maybe it should be. Maybe not. I don't
think it matters, so long as the protocol is self-descriptive and
doesn't respond success when the request actually failed by its
own semantics.

> (I disagree with you slightly about "find some among many," because the
> resource to be searched could be present but empty.  I think the
> differentiator is whether the targeted resource exists, regardless of what
> it contains.)

This isn't a helpful way to think. What we want from status codes
at the HTTP level is an indication of what recipients can do to
"fix this" even when they are not aware of the specific application
being processed over HTTP. A success doesn't need to be fixed.

For example, BigCo pays X megabucks to ensure that all valid queries
are processed within 50ms, including severe penalties when they don't.
The X has megaservers to respond to megaclients, but still doesn't
control probability and can't afford to buy a separate set of
megaservers for every specific application. So, it sprays all
SEARCH requests to N recipient servers in parallel and forwards
the first successful response. X cannot do that if it has to look
inside the body of a response to make an application-specific decision
about whether that response contains a successful SEARCH response.
Likewise, it might have an auditing requirement to store invalid
queries for some period of time, which it could do in 1 place
if the response indicates validity or in N places if it does not.

The easy thing for application developers to do is to always
send a 200 and make excuses within the content. If that was
generally considered to be an okay thing for one use of HTTP,
it would soon be for all uses of HTTP, and a whole bunch of
things that allow HTTP traffic to scale start failing.

....Roy