- From: Roy Fielding <fielding@beach.w3.org>
- Date: Tue, 26 Sep 1995 17:07:10 -0400
- To: rg@server.net
- Cc: http-wg%cuckoo.hpl.hp.com@hplb.hpl.hp.com
>The basic problem seems to be that there is status information that
>may need to be sent in response to the request (i.e. you need to
>authenticate, or you aren't allowed to write there, etc.), but there
>is also status information that may need to be sent at the end of the
>transfer (I ran out of disk space, your quota was exceeded, I didn't
>receive content-length bytes from you, the checksum didn't match,
>etc.)
Right -- we (W3C and John Mallery upstairs) came to the same conclusion
three months ago regarding the need for a two-phase PUT process. This
is one of the (many) things which will appear in the initial HTTP/1.1
spec. You will note that the 1.0 spec now contains a more detailed reference
to 1xx Informational responses.
>As it stands, this leaves a few options:
>
>1) Status is returned immediately after the request, and no
> status is returned to signify the success of the entity transfer.
100 Continue (or 401 Unauthorized, ...) will be returned as soon
as the request headers are received.
>2) Failure status is returned as soon as a failure occurs. Success
> status is never returned until the very end of the entire
> transaction.
And it only works if the client is reading the input buffer during
the write process. So, we will include two "success" responses in
the transmission -- the first being informational. The client will
be required to wait a minimum amount of time (5 secs?) until a
response of some kind is returned before continuing with the body
transmission (or restarting the request with authorization).
At the same time, an OPTIONS method will be defined to allow a client
to ask about such things before doing them.
>3) All status is returned at the completion of the entire transaction.
> The server is required to eat (and probably discard) any data the
> client sends, even if it failed.
Which is current (HTTP/1.0) behavior -- it works just fine providing the
action has been pre-negotiated using out-of-band knowledge.
>I have tried all three options, more or less. I didn't like any of
>them. At worst, they leave partial files. At best, I'm open to
>denial-of-service attacks.
No -- PUT-specific denial-of-service attacks are preventable by
restricting access, enforcing timeouts, and denying PUTs with
Content-Length > some limit.
>The only acceptable solution here seems to be to have two status
>messages returned.
Exactly.
....Roy T. Fielding Department of ICS, University of California, Irvine USA
Visiting Scholar, MIT/LCS + World-Wide Web Consortium
(fielding@w3.org) (fielding@ics.uci.edu)
Received on Tuesday, 26 September 1995 14:10:46 UTC