由于json大小,http请求失败 - 响应503和Heroku错误H13

时间:2014-09-21 12:10:31

标签: json heroku gunicorn http-status-code-503 http-post

我在heroku上运行了一个简单的烧瓶应用程序:

from flask import Flask
app = Flask(__name__)

@app.route('/test', methods=['POST'])
def test():
    return 'OK'

难以置信地成功或失败,这取决于我发送的json的大小。这是测试代码:

import json, random, string, requests

def rand_string(size):
    return ''.join([random.choice(string.letters) for i in xrange(size)])

for size in (4000, 10000):
    r = requests.post('http://my-app.herokuapp.com/test',
                      data=json.dumps(rand_string(size)),
                      headers={'content-type': 'application/json'})
    print r.status_code

在第一次调用时,它返回状态200,在第二个http状态503上显示H13 heroku错误代码。

2014-09-18T08:23:46.594543+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=POST path="/test" host=my-app.herokuapp.com request_id=91b1cd91-5a4f-445e-ad52-3c64733154b3 fwd="12.34.56.78" dyno=web.1 connect=5ms service=13ms status=503 bytes=0

HTTP response 503表示:

  由于临时,

服务器当前无法处理请求   超载或维护服务器

情况并非如此,因为服务器启动并运行,除了我的手动测试外没有负载。

Heroku的H13 code documentation说:

  

当您的web dyno中的进程接受时,会抛出此错误   连接,但然后关闭套接字而不写任何东西。

但是,所有代码都是return 'OK',所以它不是代码。

heroku是否限制了请求的大小? gunicorn吗? 我怎样才能找到,如何配置呢?

1 个答案:

答案 0 :(得分:1)

您可能受到了gunicorn的超时机制的影响,该机制默认为30秒。如果由于某种原因进行序列化需要的时间比此长,那么工作人员将被杀死并重新启动。