web.py中的分块编码问题

时间:2012-10-17 07:08:29

标签: python web.py chunked-encoding

我的web.py应用程序正在运行。它从外部接收POST请求。请求标头包含transfer-encoding: chunked。当我尝试用web.data()读取数据时,该过程开始消耗大量内存,并在几分钟后服务器死亡。

我对此transfer-encoding类型有疑问。有没有人遇到过同样的问题?

1 个答案:

答案 0 :(得分:0)

实际上,这是因为只有少数Web服务器认为请求有一个带有块的主体。 python中的SimpleHTTPServer会在这种情况下粉碎。龙卷风还可以,但无法通过wsgi.input获取身体。 gevent很好,但是webpy没有正确处理。您可以使用这些代码修复此问题。

def data():
    if 'data' not in ctx:
        if ctx.env.get('HTTP_TRANSFER_ENCODING') == 'chunked':
            ctx.data = ctx.env['wsgi.input'].read()
        else:
            cl = intget(ctx.env.get('CONTENT_LENGTH'), 0)
            ctx.data = ctx.env['wsgi.input'].read(cl)
    return ctx.data

原因是,您应该将这些代码与gevent一起使用。