[Web-SIG] Is the size argument to the input-stream read method optional?

James Y Knight foom at fuhm.net
Wed Dec 28 19:36:48 CET 2005


On Dec 28, 2005, at 1:14 PM, Ian Bicking wrote:
>> Surely that's a bug in the server, not the spec? Indeterminate  
>> length  uploads (with transfer-encoding chunked) are allowed by  
>> HTTP, after  all. The CGI spec explicitly rejects such requests,  
>> but WSGI doesn't  seem to.
>>
>
> But while it is possible, if an application uses this then it won't  
> be portable, right?  I think chunking has been explicitly excluded  
> from WSGI too, as something that should be handled/isolated in the  
> server. Not that I really know much about chunking, except that it  
> was discussed at one point.

The server handles the unchunking, but the unchunked stream it passes  
to the client has no content-length. The only way to indicate when  
the stream is done is via EOF.

It doesn't seem a good idea to me for the WSGI spec to disallow  
chunked uploads. The reason it's disallowed in the CGI spec is that  
it was added to HTTP after CGI was defined. There's no similar excuse  
for WSGI.

However, I see that in the spec, indeterminate length uploads have  
already been disallowed implicitly, by not requiring the server to  
return EOF from reads at the end of the stream:
"The server is not required to read past the client's specified  
Content-Length, and is allowed to simulate an end-of-file condition  
if the application attempts to read past that point. The application  
SHOULD NOT attempt to read more data than is specified by the  
CONTENT_LENGTH variable."

If the client cannot depend on an EOF at the end of the stream, it  
cannot read a stream without a length. I'd much rather it say  
something like:
"The server MUST NOT read past the end of the request, and MUST  
simulate an end-of-file condition if the application attempts to read  
past that point. Attempting to read from an input stream when no data  
has been provided MUST result in an end-of-file result (the empty  
string)."

but it doesn't. At least the spec does allow the server to implement  
read correctly.

James



More information about the Web-SIG mailing list