Re: [BLISS] [Fwd: I-D Action:draft-roach-sip-http-subscribe-00.txt]

Mark Nottingham <mnot@mnot.net> Fri, 02 January 2009 05:25 UTC

Return-Path: <bliss-bounces@ietf.org>
X-Original-To: bliss-archive@optimus.ietf.org
Delivered-To: ietfarch-bliss-archive@core3.amsl.com
Received: from [127.0.0.1] (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 0BAC928C1A4; Thu, 1 Jan 2009 21:25:01 -0800 (PST)
X-Original-To: bliss@core3.amsl.com
Delivered-To: bliss@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id BCAE028C15F for <bliss@core3.amsl.com>; Thu, 1 Jan 2009 20:52:30 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.299
X-Spam-Level:
X-Spam-Status: No, score=-2.299 tagged_above=-999 required=5 tests=[AWL=0.299, BAYES_00=-2.599, HTML_MESSAGE=0.001]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id dgSu0SLcCbIF for <bliss@core3.amsl.com>; Thu, 1 Jan 2009 20:52:28 -0800 (PST)
Received: from mxout-08.mxes.net (mxout-08.mxes.net [216.86.168.183]) by core3.amsl.com (Postfix) with ESMTP id 7A16028C194 for <bliss@ietf.org>; Thu, 1 Jan 2009 20:52:28 -0800 (PST)
Received: from [192.168.2.103] (unknown [71.179.34.209]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by smtp.mxes.net (Postfix) with ESMTPSA id 06744D05A0; Thu, 1 Jan 2009 23:52:11 -0500 (EST)
Message-Id: <115660BB-5C4F-4F94-BC45-D8358EE3474D@mnot.net>
From: Mark Nottingham <mnot@mnot.net>
To: Adam Roach <adam@nostrum.com>
In-Reply-To: <4942FCF5.1090509@nostrum.com>
Mime-Version: 1.0 (Apple Message framework v929.2)
Date: Thu, 01 Jan 2009 23:52:10 -0500
References: <4925F054.5020205@nostrum.com> <167dfb9b0811201703i3162dbbbpabfc085ccef6754b@mail.gmail.com> <4926351B.6000907@nostrum.com> <167dfb9b0811210007q46e938b3y9d1f9589b271bed6@mail.gmail.com> <4926D995.2010508@nostrum.com> <4D3036ED-3CDC-4FEE-ABB1-AE2D341AA3FC@mnot.net> <4942FCF5.1090509@nostrum.com>
X-Mailer: Apple Mail (2.929.2)
X-Mailman-Approved-At: Thu, 01 Jan 2009 21:24:59 -0800
Cc: bliss@ietf.org, Theo Zourzouvillys <theo@voip.co.uk>
Subject: Re: [BLISS] [Fwd: I-D Action:draft-roach-sip-http-subscribe-00.txt]
X-BeenThere: bliss@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: "Basic Level of Interoperability for SIP Services \(BLISS\) BoF" <bliss.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/bliss>, <mailto:bliss-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/pipermail/bliss>
List-Post: <mailto:bliss@ietf.org>
List-Help: <mailto:bliss-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/bliss>, <mailto:bliss-request@ietf.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1188049551=="
Sender: bliss-bounces@ietf.org
Errors-To: bliss-bounces@ietf.org

Hi Adam,

Sorry for the holiday-induced delay.

On 13/12/2008, at 11:08 AM, Adam Roach wrote:
>
>> * Following on that thought, the idea behind the most recent Link  
>> draft is to talk about link relations generically, and make Link  
>> headers one use of them.
>
> I understand what you're saying, but I'm somewhat sensitive to  
> having many optional ways of doing the same thing in the same  
> protocol. In my experience, you either end up with everyone  
> supporting every way of doing things (driving up implementation  
> costs), or with people selecting only their favorite mechanisms  
> (driving down interoperability). There is, of course, an unhappy  
> medium between those two extremes, in which you get both an increase  
> in implementation complexity and a decrease in interoperability  
> (albeit to a lesser degree).

I agree, and wasn't proposing that multiple discovery mechanisms be  
called out (I see others drafts doing this and wince too); rather,  
just that the door be left open for other ways to be used if someone  
wants build on top of this in the future.


>> * 3.4 Subscription Duration -- just a thought, is it worth tying  
>> the default subscription duration to the freshness lifetime of the  
>> HTTP response (as defined by HTTP)?
>
> I'm not sure. The goal behind selecting subscription durations is to  
> balance server load against time to recover in the case of a  
> failure. If you want to propose a concrete formula, I'll be happy to  
> incorporate it into the document, but I think it is of limited value.

I'm not sure enough of it to make a concrete proposal. I can  
definitely see situations where the subscription lifetime varies  
significantly, just wondering if it's better to use the expiry time as  
a default, instead of baking in a (fairly arbitrary) number.


>> * 3.5.1 message/httpfrag -- did you consider using application/http  
>> (defined in RFC2616)? I mention this because HTTP already defines  
>> how to update a cache entry's headers based upon a HEAD or 304  
>> response; it would be nice to reuse that if possible. Also, what  
>> does making the status-line optional bring? The semantics of the  
>> message would be clearer if it were required...
>
> I'm hardly an HTTP expert -- so, on first glance, I feared that re- 
> using message/http would run afoul of semantic restrictions  
> associated with that content type (in the same way that omitting  
> critical header fields from a SIP message would make it invalid;  
> that is what drove development of the message/sipfrag content type).
>
> If you think that re-use of message/http is kosher in this context,  
> then I'd be quite pleased to use that instead of defining a new  
> content-type. I strongly prefer re-use over re-invention.
>
> The optional status-line feature was copied from message/sipfrag. It  
> has little value here, so I'm happy to make status lines mandatory.

Not message/http, application/http;
> The application/http type can be used to enclose a pipeline of one  
> or more HTTP request or response messages (not intermixed).

I think this will work, provided that the status-line is mandatory.  
Remember that a HEAD response is allowed to omit a body, so from the  
purely syntactic standpoint, you should be OK if the body is missing.  
However, see below.


>> * 3.5.2 - Why require an ETag or Content-MD5? Why recommend a Last- 
>> Modified?
>
> Philosophically: SIP Events, in general, reports the state of a  
> resource, not events that change its state (despite its name, which  
> I have grown to regret). It is true that state is usefully reported  
> when it changes, but thinking about it as the changes themselves  
> instead of the resultant state tends to put the cart before the horse.
>
> Practically: without some means of tying the notification to the  
> resultant HTTP document, you end up with race conditions in which  
> the state of a document changes between retrieval and subscription  
> to its state. There are other ways to solve this race, but they're  
> messy.

OK, that makes sense. Would you be comfortable making these  
requirements a SHOULD (if they aren't already)?


> [from a later message]
>
>> * Does the NOTIFY message include the URI of the resource that has  
>> changed (didn't see it, but I may be missing something). It should  
>> be added if not; otherwise, you're baking in a one-to-one  
>> relationship between monitoring channels and http URIs. There will  
>> be use cases where the receiver of the NOTIFY doesn't have enough  
>> context to associate the message body you're sending with a URI.
>
> Good point. How would you feel about adding a requirement to include  
> a "Link" header in the message/http body with a relation type of  
> "self"?

Content-Location is probably more appropriate.


>> * The simplest and most efficient notification message to send is  
>> "this resource has changed"; the client can then decide whether or  
>> not to fetch an update, and combining any old response with a new  
>> one is simple. It also assures that the subscribing client isn't  
>> required to implement a cache. I would very much encourage you to  
>> support this mode of interaction.
>
> That is effectively what I'm trying to do; however, see my notes  
> above about race conditions. If a client doesn't want to cache  
> anything, they can simply treat each NOTIFY message as an indication  
> that the resource has (likely) changed. (They would still be well  
> off keeping track of the Content-MD5 and/or ETag for the brief  
> period between the HTTP operation and the SIP subscription just to  
> make sure the resource didn't change between those steps).

OK. My concern is when the client does have a cached or otherwise  
locally stored copy, and they need to combine it with a partial  
response -- e.g., when the status code isn't present, or partial  
headers are there, etc. This area is reasonably well-defined when used  
inside of HTTP, but taken out of context, it doesn't hold up terribly  
well.


>> * Conversely, if you are you intent on allowing transfer of an  
>> entity with a notification, you may want to consider allowing the  
>> transfer of multiple entities, to allow the use of content  
>> negotiation (e.g., both an English and French representation under  
>> the same URI, or a png and a gif). application/http would support  
>> this.
>
> I'm ambivalent about allowing the inclusion of bodies in the  
> notifications. I would hesitate precluding future specifications  
> from doing so, but I'm not all that interested in developing a  
> complicated mechanism in this document that replicates the full set  
> of HTTP features (such as language and content negotiation).

I see. I didn't get that from reading the spec; my concerns were about  
the more complex cases where people were trying to update headers and  
bodies using the notifications (as above).

Perhaps the right thing to do is to have a very limited new media type  
that communicates just a few things;
  * URI (required)
  * Content-MD5 (optional)
  * ETag (optional)
  * Last-Modified (optional)

without the option for status-line, other headers or body, to avoid  
the complexity. More advanced uses could use application/http (but you  
wouldn't necessarily need to specify how to do this...)

Conneg definitely makes things more complex. I think that it's  
legitimate to say that a notification applies to all representations  
of a resource, and that you can't selectively send notifications for a  
particular representation. The only sticky part here is that if there  
*are* multiple representations for a resource, it's important for the  
server to keep which one it's using for the ETag and/or Content-MD5  
straight.


> [responses to previous messages in thread]
>
>> ...
>> That said, I agree that the draft shouldn't preclude other  
>> discovery mechanisms, as mentioned above.
>
> I'll reiterate my concerns about too many ways to do something. I'm  
> adding in the <link> and <atom:link/> mechanisms, but I'd hate to  
> see an explosion of mechanisms here, as it would make client  
> implementations untenably complicated.

Yes; see above.

Cheers,

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

_______________________________________________
BLISS mailing list
BLISS@ietf.org
https://www.ietf.org/mailman/listinfo/bliss