我有一个jQuery Ajax调用,如下所示:
$("#tags").keyup(function(event) { $.ajax({url: "/terms", type: "POST", contentType: "application/json", data: JSON.stringify({"prefix": $("#tags").val() }), dataType: "json", success: function(response) { display_terms(response.terms); }, });
我有这样的Flask方法:
@app.route("/terms", methods=["POST"]) def terms_by_prefix(): req = flask.request.json tlist = terms.find_by_prefix(req["prefix"]) return flask.jsonify({'terms': tlist})
tcpdump显示HTTP对话框:
POST /terms HTTP/1.1 Host: 127.0.0.1:5000 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0 Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Content-Type: application/json; charset=UTF-8 X-Requested-With: XMLHttpRequest Referer: http://127.0.0.1:5000/ Content-Length: 27 Pragma: no-cache Cache-Control: no-cache {"prefix":"foo"}
但是,Flask回复时没有保持活动状态。
HTTP/1.0 200 OK Content-Type: application/json Content-Length: 445 Server: Werkzeug/0.8.3 Python/2.7.2+ Date: Wed, 09 May 2012 17:55:04 GMT {"terms": [...]}
确实没有实施保持活动的情况吗?
Werkzeug的集成Web服务器基于Python标准库的BaseHTTPServer构建。如果将HTTPHTTP协议版本设置为1.1,则BaseHTTPServer似乎支持Keep- Alives。
Werkzeug不会这样做,但是如果您准备好使用Flask实例化Werkzeug的BaseWSGIServer的机制,则可以自己完成。查看Flask.run()哪些电话werkzeug.serving.run_simple()。你要做的归结为BaseWSGIServer.protocol_version = "HTTP/1.1"。
Flask.run()
werkzeug.serving.run_simple()
BaseWSGIServer.protocol_version = "HTTP/1.1"
我尚未测试解决方案。我想您确实知道Flask的Web服务器应仅用于开发。