I'm looking for a well-supported multithreaded Python HTTP server that supports chunked encoding replies. (I.e. "Transfer-Encoding: chunked" on responses). What's the best HTTP server base to start with for this purpose?
Twisted supports chunked transfer encoding (API link) (see also the API doc for HTTPChannel). There are a number of production-grade projects using Twisted (for example, Apple uses it for the iCalendar server in Mac OS X Server), so it's quite well supported and very robust.
Twisted supports chunked transfer and it does so transparently. i.e., if your request handler does not specify a response length, twisted will automatically switch to chunked transfer and it will generate one chunk per call to Request.write.
You can implement a simple chunked server using Python's HTTPServer, by adding this to your serve function:
def _serve(self, res):
response = next(res)
content_type = 'application/json'
self.send_response(200)
self.send_header('Content-Type', content_type)
self.send_header('Transfer-Encoding', 'chunked')
self.end_headers()
try:
while True:
# This line removed as suggested by @SergeyNudnov
# r = response.encode('utf-8')
l = len(r)
self.wfile.write('{:X}\r\n{}\r\n'.format(l, r).encode('utf-8'))
response = next(it)
except StopIteration:
pass
self.wfile.write('0\r\n\r\n'.encode('utf-8'))
I would not recommend it for production use.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With