W3C home > Mailing lists > Public > xml-dist-app@w3.org > April 2002

RE: Issues 12 & 192 (long)

From: <noah_mendelsohn@us.ibm.com>
Date: Tue, 2 Apr 2002 19:06:12 -0500
To: <LMM@acm.org>
Cc: xml-dist-app@w3.org
Message-ID: <OFD11C33BE.63097C84-ON85256B8F.008301C6@lotus.com>
Granting that I have never been the truest of believers in "chameleon", I 
find Larry's analysis convincing.  If I understand, he's advocating a 
practical approach, which I take to be:

* Admit that we're layering one protocol on another, not in some sense 
"extending".   That's true for HTTP on TCP and for SOAP on HTTP (I know 
Mark B. disagrees). 

* Make a best effort to use the services of the lower level in the manner 
appropriate to that lower layer, which may or may not be a direct 
reflection of upper layer semantics.    Close a connection at the TCP 
level when you're done with it, which may or may not be when this or that 
aspect of your HTTP activity completes.  For SOAP on HTTP, choose the HTTP 
status code most likely to keep the HTTP implementations happy...Larry 
suggests that may be 200, even for a SOAP fault. 

So it's not quite tunneling.  You are taking some trouble to reflect what 
you know in the upper layer, but only in the manner that best helps the 
lower layer.  If it's time to close the stream, you do close it.  If a 500 
status code will make more sense at the HTTP layer, you don't blindly send 
a 200.  True tunneling would imply that the status code is necessarily 
independent of the SOAP contents.    I hear Larry to say:  consider the 
fact that the SOAP message is a fault, but don't leap to the conclusion 
that 200 is the wrong status code for it.

If I've understood correctly, I think Larry has articulated the balance 
that I've been trying to express right along in this discussion.  If so, 
thank you (well, thank you anyway!)

Noah Mendelsohn                              Voice: 1-617-693-4036
IBM Corporation                                Fax: 1-617-693-8676
One Rogers Street
Cambridge, MA 02142

"Larry Masinter" <LMM@acm.org>
Sent by: xml-dist-app-request@w3.org
03/31/2002 01:39 PM
Please respond to LMM

        To:     <xml-dist-app@w3.org>
        cc:     (bcc: Noah Mendelsohn/Cambridge/IBM)
        Subject:        RE: Issues 12 & 192 (long)

I think I originated this issue two years ago
and that the arguments haven't changed much. I worry
about whether "XML Protocol" can ever converge when
issues remain open and active for two years with no

Here's another analogy:

HTTP is layered on TCP/IP. TCP/IP has its own ways of signalling.
For example, TCP/IP can signal a close of connection. HTTP was
designed so that it could also layer over other byte-stream
protocols; at the time, there was some interest in HTTP-over-DECNet,
for example.

HTTP 0.9 had an unfortunate design: it used close-of-connection
at the TCP layer to signal end-of-data at the HTTP layer.
Unfortunately, this led to serious problems, because the
application layer, when it got a close-of-connection, couldn't
distinguish between the connection closing because there
wasn't any data, or the connection closing for some other
reason -- a break in the gateway, some other interference of
an intermediary, etc.

This problem wasn't understood at first, because in ordinary
operation, most of the time, using close-of-connection for
end-of-data was fine.

HTTP/1.0 tried to fix the problems by adding content-length
and saying it was the determining factor, and HTTP/1.1
added chunked encoding to fix the problems with using
content-length (that content couldn't be transmitted as
generated even when the length was known.)

In the case of SOAP-over-HTTP, you've gone beyond relying
on the 500 Server Error to signal anything having to do
with SOAP faults, and now you're arguing about whether
it's reasonable to ALSO use "500 server error" in the
cases where the SOAP layer is signalling a SOAP fault.

By analogy, this is analogous to the question about whether
a HTTP server may ALSO close the connection when it's still
sending the chunked data. The answer wasn't based on
first principles about signalling twice (once at the
HTTP layer and once at the TCP layer) but about whether
the signal at the TCP layer (connection close) was useful
for the TCP layer (that the connection wasn't going to be
used any more.)

In the case of SOAP over HTTP, the arguments for the utility
of "500 Server Error" instead of "200 OK" for SOAP faults
haven't been convincing -- where's the utility? Mark Baker
came up with the (IMO nonsensical) example of a
"HTTP proxy tracking successful purchases", but for the
most part, a "500 Server Error" would seem to interfere
more than it would help.

In fact, the analogy is a pretty good one: you shouldn't
close the TCP connection if you want to send more data
soon to the same partner. "connection close" is a signal
for no further communication. Similarly, "500 Server Error"
signals an unrecoverable error at the HTTP layer, and
would interfere with further transactions with the same
server, at least in some implementations.
Received on Tuesday, 2 April 2002 19:18:20 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 22:01:19 UTC