Gunicorn(Python3.4和3.3)仅发送响应头而无数据

9 投票
2 回答
3313 浏览
提问于 2025-04-18 02:06

我在云端有一个虚拟机,使用的是Python 3.3(也试过3.4,结果一样)和Gunicorn 18。
我复制粘贴了一个“你好,世界”的应用程序(app.py):

def app(environ, start_response):
    data = "Hello, World!\n"
    start_response("200 OK", [
        ("Content-Type", "text/plain"),
        ("Content-Length", str(len(data)))
    ])
    return iter([data])

然后我运行了:

gunicorn -w 4 -b 0.0.0.0:8000 app:app

工作进程启动没有错误,但当我尝试用浏览器打开时,只能看到头部信息,没有内容:

Connection: "close"
Content-Length: "14"
...and so on

如果我添加一些自定义头部信息,我能在响应中看到它,但就是没有响应内容。请帮帮我。

2 个回答

19

为了补充Graham的解释,把

return iter([data])

换成

return [bytes(data, 'utf-8')]

在Python 3中对我来说是有效的。当我遇到同样的问题时,这个方法也解决了我的问题。

6

首先,你的代码不是一个有效的Python 3的WSGI应用。它必须返回一个可以迭代的字节字符串,而不是原生的字符串(在Python 3中是unicode字符串)。另外,使用iter()这个函数也是多余的,直接返回列表就可以了。

撰写回答