Re: Statelessness
Simon E Spero <ses@tipper.oit.unc.edu>
Errors-To: listmaster@www0.cern.ch
Date: Wed, 18 May 1994 04:52:24 +0200
Errors-To: listmaster@www0.cern.ch
Message-id: <9405180138.AA20717@tipper.oit.unc.edu>
Errors-To: listmaster@www0.cern.ch
Reply-To: ses@tipper.oit.unc.edu
Originator: www-talk@info.cern.ch
Sender: www-talk@www0.cern.ch
Precedence: bulk
From: Simon E Spero <ses@tipper.oit.unc.edu>
To: Multiple recipients of list <www-talk@www0.cern.ch>
Subject: Re: Statelessness
X-Listprocessor-Version: 6.0c -- ListProcessor by Anastasios Kotsikonas
>>>>> "Jon" == Jon P Knight <J.P.Knight@lut.ac.uk> writes:
Jon> This is quite true IMHO. It begs the question why are people
Jon> so intent on using a stateless protocol for doing inherently
Jon> non-stateless operations? HTTP isn't as far as I'm aware
Jon> intended to become the One True Protocol(tm) such that nobody
Jon> will implement anything else. If you need stateful
Jon> transactions, why not come up with a separate stateful
Jon> protocol rather than breaking the clean statelessness of HTTP
Jon> which has been so useful to date?
Although the proposed hacks to TCP for transaction processing will make
this better, it does seem to me that adding support for multiple
transactions over the same connection would be a big win. Using MIME is
not a very good solution in this case, as the vast bulk of all secondary
transactions are binary files, and having to scan through byte by byte
for the end marker is a major lose.
What we have here is a textbook case of where a session protocol is
actually useful; fortunately we have a good example to look at when
designing a session protocol. All we have to do is look at the OSI session,
and then make sure to do exactly the opposite. Since OSI session has every
possible design flaw in there somewhere, all that's left is perfection :)
As a first cut, how about something like the following (this is vaguely
similar to IMAP in the way that each transaction has an ID associated with
it, to allow requests and responses to be streamed.
> HOLD / HTTP/1.1
> [various accept lines, followed by blank line]
< HTTP/1.1 200 OK
> START-SESSION 1
< HTTP/1.1 xxx 1 started
> 1 GET /
< HTTP/1.1 200 1 OK
< DATA 1 8192
< [8192 bytes]
< DATA 1 200
< [200 bytes]
< END 1
> START-SESSION 2
< HTTP/1.1 xxx 2 started
> 2 GET foo.gif
< HTTP/1.1 200 2 OK
[etc]
Simon