【问题标题】:Chunked encoding issue in web.pyweb.py 中的分块编码问题
【发布时间】:2012-10-17 07:08:29
【问题描述】:

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

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

【问题讨论】:

    标签: python web.py chunked-encoding


    【解决方案1】:

    实际上,这是因为只有少数 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 一起使用。

    【讨论】: