[Twisted-Python] web client FileBodyProducer - transfer encoding

Jean-Paul Calderone exarkun at twistedmatrix.com
Mon Jan 30 17:59:33 MST 2017


On Mon, Jan 30, 2017 at 7:44 PM, Glyph Lefkowitz <glyph at twistedmatrix.com>
wrote:

> Gotcha.  I guess what I meant was that you shouldn't care about this at
> the application level, but you're talking about an operational concern, not
> an application-level concern.
>
> Perhaps this should be a tunable on Agent somehow.  Can you file a ticket?
>


Well... It *is* sort of tuneable, as you implied earlier.

If you pass an IBodyProducer with a non-None length, Agent will send a
Content-Length header - not use chunked Transfer-Encoding.
FileBodyProducer doesn't know how to determine the length of a StringIO, so
you get chunked with this example.  If you write the JSON to a regular file
and FileBodyProducer(open(the file)) you'll get a Content-Length request.
You could also write a new (trivial) IBodyProducer that does know how to
compute the length of a StringIO.

The documentation doesn't exactly spell this out - but the only reason
`length` is part of the interface is to be able to generate the
Content-Length header.

What would the ticket be?  Expanded documentation to make this behavior
into an explicit guarantee of the interface?  A new toggle somewhere to
force Agent.request into one mode or the other (regardless of the
performance consequences)?

And that stuff you said about proxies before was true ... So even if you
can control this in Agent, you're still not *guaranteed* the server will
see what you send.

Jean-Paul
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20170130/e1cd4566/attachment-0002.html>


More information about the Twisted-Python mailing list