支持分块编码的Python HTTP服务器?

时间:2009-04-08 22:58:20

标签: python http chunked-encoding

我正在寻找一个支持良好的多线程Python HTTP服务器,它支持分块编码回复。 (即响应中的“转移编码:分块”)。为此目的,最好的HTTP服务器基础是什么?

4 个答案:

答案 0 :(得分:5)

Twisted support chunked transfer encoding (API link)(另请参阅HTTPChannel的API文档)。有许多使用Twisted的生产级项目(例如,Apple将它用于Mac OS X Server中的iCalendar服务器),因此它得到了很好的支持并且非常强大。

答案 1 :(得分:2)

Twisted支持分块传输,它可以透明地完成。即,如果您的请求处理程序未指定响应长度,则twisted将自动切换到chunked transfer,并且每次调用Request.write时将生成一个块。

答案 2 :(得分:0)

我非常确定符合WSGI的服务器应该支持这一点。实质上,WSGI应用程序返回Web服务器返回的可迭代块。我没有第一手经验,但这里有list of compliant servers

我认为,如果使用Python的内置CGIHTTPServer,如果WSGI服务器不符合您的要求,那么滚动自己会相当容易。它已经是多线程的,所以你可以自己决定回复。

答案 3 :(得分:0)

我设法使用Tornado

#!/usr/bin/env python

import logging

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

from tornado.options import define, options

define("port", default=8080, help="run on the given port", type=int)

@tornado.web.stream_request_body
class MainHandler(tornado.web.RequestHandler):
    def post(self):
        print()
    def data_received(self, chunk):
        self.write(chunk)

        logging.info(chunk)

def main():
    tornado.options.parse_command_line()

    application = tornado.web.Application([
        (r"/", MainHandler),
    ])

    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)

    tornado.ioloop.IOLoop.current().start()

if __name__ == "__main__":
    main()