由于 json 大小,http 请求失败 - 响应 503 和 Heroku 错误 H13
Posted
技术标签:
【中文标题】由于 json 大小,http 请求失败 - 响应 503 和 Heroku 错误 H13【英文标题】:http request fails due to json size - response 503 and Heroku error H13 【发布时间】:2014-11-15 12:44:26 【问题描述】:我在 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 是否限制请求的大小?有独角兽吗? 我怎样才能找到它以及如何配置它?
【问题讨论】:
【参考方案1】:您可能受到 gunicorn 的超时机制的影响,默认为 30 秒。如果由于某种原因序列化需要更长的时间,worker 将被杀死并重新启动。
【讨论】:
以上是关于由于 json 大小,http 请求失败 - 响应 503 和 Heroku 错误 H13的主要内容,如果未能解决你的问题,请参考以下文章
RESTful json 响应在 tomcat 上失败,但在 GlassFish 中有效
AWS Java Lambda 压缩 JSON 响应失败:“由于配置错误,执行失败:格式错误的 Lambda 代理响应”