Streaming templating languages for use as WSGI body.
Alice Bevan–McGregor
alice at gothcandy.com
Thu Jan 6 17:33:29 EST 2011
On 2011-01-06 11:11:27 -0800, Adam Tauno Williams said:
> On Thu, 2011-01-06 at 11:07 -0800, Alice Bevan–McGregor wrote:
>> On 2011-01-06 10:00:39 -0800, Adam Tauno Williams said:
>>> With HTTP/1.0 [and WSGI is HTTP/1.0 only] you have to provide a
>>> Content-Length header - so you have to generate the entire response at
>>> once [however you want to muddy "at once"].
>>
>> Both of these statements are false.
>
> Both these statements are true! I suggest you consult the HTTP spec.
It's generally polite to provide direct references, either sections or
actual links when asking someone to RTFM. No matter, examining the
HTTP/1.0 RFC (conveniently chopped up and HTML-ified by the w3) I find
evidence to support your argument:
http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Entity-Body
However, HTTP clients are smarter than the raw spec. ;)
Run the code found at the following link and poke the wsgiref server
that is run in a web browser, with curl, or any other HTTP tool, even
telnet:
http://pastie.textmate.org/1435415
You'll notice no content-length header (wsgiref adds one automatically
for single-element iterables) and no difficulty in receiving the entire
response body, even without a content-length.
The de-facto standard behaviour combined with the following text from
WSGI makes streaming content with non-deterministic lengths completely
reasonable:
> WSGI servers, gateways, and middleware must not delay the transmission
> of any block; they must either fully transmit the block to the client,
> or guarantee that they will continue transmission even while the
> application is producing its next block.
Point me to a HTTP client from the last 10 years that doesn't handle
this particular condition and I'll believe your original statements.
:)
- Alice.
More information about the Python-list
mailing list