- From: Henrik Frystyk Nielsen <henrikn@microsoft.com>
- Date: Thu, 10 Oct 2002 08:44:23 -0700
- To: <jones@research.att.com>, <Nilo.Mitra@am1.ericsson.se>, <fallside@us.ibm.com>, <gdaniels@macromedia.com>, <marc.hadley@sun.com>, "Martin Gudgin" <mgudgin@microsoft.com>, <moreau@crf.canon.fr>, <noah_mendelsohn@us.ibm.com>
- Cc: <www-archive@w3.org>
Mark,
I think the main insight is that we need both mechanisms: some header
blocks CANNOT be forwarded if ignored and others can. It depends on the
semantics. As a result, which way the default behavior falls doesn't
really address the deeper problem. Given this, and that flipping the
default will make the overall impact bigger, I would advise against
doing this.
Regarding the <hdr mustUnderstand='true'
role='http://www.w3.org/2002/06/soap-envelope/role/relay'> case, we
don't say that it will never get forwarded, merely that the forwarding
is defined by the header block.
Henrik
>-----Original Message-----
>From: jones@research.att.com [mailto:jones@research.att.com]
>Sent: Thursday, October 10, 2002 06:22
>To: Nilo.Mitra@am1.ericsson.se; fallside@us.ibm.com;
>gdaniels@macromedia.com; Henrik Frystyk Nielsen;
>jones@research.att.com; marc.hadley@sun.com; Martin Gudgin;
>moreau@crf.canon.fr; noah_mendelsohn@us.ibm.com
>Cc: www-archive@w3.org
>Subject: Re: Proposal for new last call issue: Some
>unprocessed headers should stay
>
>
>Another alternative solution we had discussed was:
>
> (a) retain non-mandatory headers if they are not processed
>at a node, and
>
> (b) if a header is processed then re-insertion is dictated
>by the spec for the header.
>
>Essentially this make 'relay' the default behavior for
>non-mandatory headers (mustUnderstand='false') that are not
>processed. This avoids defining another role
>(http://www.w3.org/2002/06/soap-envelope/role/relay), and
>makes sense semantically since a given role ('next' or
>otherwise) can be assumed by multiple nodes, but some may not
>have deployed software (for whatever reason) at any given
>point in time. Optional headers would simply be processed by
>the first node actually equipped to do so which seems like the
>right semantics anyway.
>
>Is there a reason why this isn't preferable to the role=relay
>formulation?
>
>Also, the role=relay solution leaves us with a strange looking
>edge case of <hdr mustUnderstand='true'
>role='http://www.w3.org/2002/06/soap-envelope/role/relay'>,
>which will get processed by any node wanted to act as 'relay',
>but in fact will never relay at all!
>
>--mark
>
>Mark A. Jones
>AT&T Labs
>Shannon Laboratory
>Room 2A-02
>180 Park Ave.
>Florham Park, NJ 07932-0971
>
>email: jones@research.att.com
>phone: (973) 360-8326
> fax: (973) 236-6453
>
>
> From: noah_mendelsohn@us.ibm.com
> To: Marc Hadley <marc.hadley@sun.com>, henrikn@microsoft.com,
> mgudgin@microsoft.com, moreau@crf.canon.fr,
>Nilo.Mitra@am1.ericsson.se,
> jones@research.att.com, fallside@us.ibm.com,
>gdaniels@macromedia.com
> Cc: www-archive@w3.org
> Subject: Proposal for new last call issue: Some
>unprocessed headers should stay
> Date: Wed, 9 Oct 2002 22:57:14 -0400
>
> ==============================================================
> I expect to be submitting the following to distApp
>within the next day or
> two as a proposed new issue. I think the note is
>self-explanatory, but I
> wanted to show it in advance to those of you who have
>been involved in
> informal discussion of this issue, and also to one or
>two more whom I
> thought might be interested. Comments welcome (but I
>will mostly be at
> DevCon the next few days, and then at Schema WG Monday
>and Tues. If you
> think this is good enough to start discussion on
>distApp, let me know and
> I'll put it there asap. We can decide what if anything
>to actually do
> with the proposal once that's done.) Thanks.
>
> Noah
> ==============================================================
>
>
> At the face-to-face on the West Coast at SAS, several
>us noticed and began
>
> privately discussing what we now believe is a problem
>that needs at least
> some attention in the specification. Specifically,
>there is a use case
> that more or less all of us have come to believe is
>important, and for
> which the specification is at best ambiguous and at
>worst in capable of
> meeting without republication. Several of us have come
>up with a proposed
>
> resolution that we believe to be straightforward, low
>risk, and within
> the bounds of what we can reasonably do without going
>back to last call. I
>
> am indebted to Mark Jones for first pointing this out,
>and to numerous
> others including Henrik and Marc Hadley for helpful
>discussion and
> comment. Particular thanks to Henrik for helping me to
>refine early
> drafts of this note.
>
> The Problem
> -----------
>
> Among the reasons that we have the "next" role is for
>headers that carry
> information to be available to all downstream nodes.
>One of the simplest
> scenarios would be to have such a header that would
>travel with the
> message, to be available to those nodes that
>"understand" the header, and
> to be ignored and passed on by nodes that do not
>understand it. As a
> simple example, I might want to put in the header
>indicating the time at
> which the message was originally sent. More
>substantively, I might wish to
>
> put in a digital signature, to be checked by those who
>care, and ignored
> but retained by others.
>
> SOAP 1.2 as proposed cannot support these simple
>scenarios. Why? Because
> section 2.7.1 makes clear that a forwarding
>intermediary MUST remove from
> the message all headers targeted to it, and can trigger
>reinsertion only
> by processing and understanding a header. In the case
>where you don't
> understand the header, you must remove it. It's
>essential to note that we
>
> are considering the case of mustUnderstand='false';
>there is no problem
> with the 'true' case.
>
> Approaches to Resolving the Problem
> -----------------------------------
>
> Discussion of this problem has been going on at a low
>level for awhile, in
>
> part because some of us have been trying to decide
>whether the existing
> specification can somehow be made to do the right
>thing. Given that we
> are in last call, that would obviously be a desirable
>approach. So, here
> I briefly outline some of the approaches that were
>considered, and then in
>
> the next section I propose one that seems to some of us
>to be the best.
>
> It is tempting to ask whether a user might be able to
>design specific
> headers and/or roles that would meet the need. In
>other words: if I
> define a role and some headers to use with it, then I
>could say that you
> wouldn't assume that role unless you knew the
>specification for at least
> one of the headers, and that specification would
>implement a feature to
> change the relay rules for that role. My personal
>conclusion is that this
>
> is possible in principle, but would not be practical
>when one considers
> the way that most SOAP software will in fact be built.
>Reason: the core
> rules regarding the relaying of headers are baked into
>section 2.7.1, and
> in practice will often be implemented by
>general-purpose SOAP middleware.
> The key point is that such middleware will in general
>be written to treat
> all user-defined roles identically. Allowing
>particular roles to change
> the relay rules requires that such middleware have
>pluggable handlers that
>
> key on specific role names, and this is something that
>few of us
> anticipate doing.
>
> There is another alternative which is also coherent,
>and indeed is more
> powerful than the one proposed below, but which seems
>to be overkill and
> would probably take us back to last call. That
>alternative would be to
> introduce a new attribute for use on header entries
>along the lines of
> relayIfNotProcessed='true'. Thus:
>
> <soap:Header>
> <nrm:myHeader role="..any role you like..."
> mustUnderstand="false"
> relayIfNotProcessed="true">
> ...
> </nrm:myHeader>
> </soap:Header>
>
> This seems to work, and has the capability of working
>with any role. It
> just seems like more power and complexity than we need
>to deal with the
> specific use case. If we were to get serious about
>this proposal,
> there would be several details requiring refinement,
>but for now
> I am just suggesting that this is not the direction to go.
>
> A Proposal
> ----------
>
> Having done the above analysis, we conclude that:
>
> * The use case is important that we must find a way to meet it
> * The draft as written doesn't give explanation of how
> * We need a simple, minimally invasive fix to what we have
>
> We propose one new builtin role to be called:
> http://www.w3.org/2002/06/soap-envelope/role/relay .
> In most respects, this role would be like any other.
> Any intermediary or ultimate receiver MAY choose to
> assume this role. The one significant difference, and
> it is one that we believe has to be baked into the
> specification from day one, is that section 2.7.1 will
> be changed as follows:
>
> <original>
> Forwarding SOAP intermediaries MUST process the message
> according to the SOAP processing model defined in 2.6
> Processing SOAP Messages. They MUST also remove from
> the SOAP message all SOAP header blocks targeted at
> themselves, prior to forwarding, regardless of whether
> these header blocks were processed or ignored.
>
> In addition, forwarding SOAP intermediaries MUST also
> obey the specification for the SOAP forwarding feature
> being used. The specification for such a feature MUST
> describe the required semantics, including the rules
> describing how the forwarded message is
> constructed. Such rules MAY describe placement of
> inserted or reinserted SOAP header blocks. Inserted
> SOAP header blocks might be indistinguishable from one
> or more of the header blocks removed above.
> </original>
>
> <proposed>
> Forwarding SOAP intermediaries MUST process the message
> according to the SOAP processing model defined in
> 2.6 Processing SOAP Messages. In addition, when
> generating a SOAP message for the purpose of forwarding,
> they MUST:
>
> * For any processed SOAP header block, as well as for
> ignored SOAP header blocks targeted to the node
> using a role other than
> http://www.w3.org/2002/06/soap-envelope/role/relay:
> remove the header block prior to forwarding
>
> * Retain all SOAP header blocks that were targeted at
> the forwarding node using the role
> "http://www.w3.org/2002/06/soap-envelope/role/relay"
> but ignored during processing.
>
>
> In addition, forwarding SOAP intermediaries MUST also
> obey the specification for the SOAP forwarding feature
> being used. The specification for such a feature MUST
> describe the required semantics, including the rules
> describing how the forwarded message is
> constructed. Such rules MAY describe placement of
> inserted or reinserted SOAP header blocks. Inserted
> SOAP header blocks might be indistinguishable from one
> or more of the header blocks removed above.
> </proposed>
>
> [1]
>http://www.w3.org/2000/xp/Group/2/06/LC/soap>12-part1.html#forwardinter
>
>
>------------------------------------------------------------------
> Noah Mendelsohn Voice:
>1-617-693-4036
> IBM Corporation Fax:
>1-617-693-8676
> One Rogers Street
> Cambridge, MA 02142
>
>------------------------------------------------------------------
>
>
>
>
>
Received on Thursday, 10 October 2002 11:44:57 UTC