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

7 投票
6 回答
7421 浏览
提问于 2025-04-15 11:06

我在寻找一个支持多线程的Python HTTP服务器,并且能够处理分块编码的回复。(也就是说,回复中要有“Transfer-Encoding: chunked”这个设置)。请问,哪个HTTP服务器最适合用来做这个呢?

6 个回答

2

你可以用Python的HTTPServer来实现一个简单的分块服务器,只需要在你的服务函数里加上这一段代码:

    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(response)
                self.wfile.write('{:X}\r\n{}\r\n'.format(l, response).encode('utf-8'))

                response = next(res)
        except StopIteration:
            pass

        self.wfile.write('0\r\n\r\n'.encode('utf-8'))

不过我不建议在正式环境中使用这个。

2

Twisted支持分块传输,而且这个过程对你来说是透明的。也就是说,如果你的请求处理程序没有指定响应的长度,Twisted会自动切换到分块传输模式,并且每次调用Request.write的时候,它会生成一个数据块。

5

Twisted支持一种叫做“分块传输编码”的技术(可以查看这个链接了解更多)。如果你想了解更多关于它的工作原理,可以参考这个API文档。其实,有很多成熟的项目在使用Twisted,比如苹果在Mac OS X Server的iCalendar服务器中就用到了它,所以它的支持非常好,功能也很强大。

撰写回答