2012-05-09 11 views
5

ので、同様に、私は、jQueryのAjax呼び出しを持っています。しかし、フラスコをFlaskを作成する方法/ Ajax 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"} 

@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ダイアログを示していますので、は次のように

$("#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); }, 
     }); 

私はフラスコ法を持っていますキープアライブなしで返信します。

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": [...]} 

キープアライブが実装されていないのは本当ですか?

答えて

6

Werkzeugの統合Webサーバーは、Pythonの標準ライブラリからBaseHTTPServer上に構築されています。 BaseHTTPServerは、HTTPプロトコルのバージョンを1.1に設定すると、Keep-Alivesをサポートしているようです。

Werkzeugはそれをしませんが、FlaskがWerkzeugのBaseWSGIServerをインスタンス化するために使用する機械をハックする準備ができていれば、それを自分で行うことができます。 werkzeug.serving.run_simple()を呼び出すFlask.run()を参照してください。あなたがしなければならないのは、BaseWSGIServer.protocol_version = "HTTP/1.1"です。

私は解決策をテストしていません。私はあなたがFlaskのWebサーバーが開発のためだけに使用されるべきであることを知っていると思います。

+0

実際、統合されたWebサーバーは開発目的でのみ使用されます。 – ThiefMaster

+1

私は昨日明らかに疲れました。私は1.0の返事があることに気付かなかった。 :/私は見て、何ができるかを見ていきます。どうも。 – Bittrance

13

デフォルトのrequest_handlerはWSGIRequestHandlerです。

app.run()

、1行を追加し、 WSGIRequestHandler.protocol_version = "HTTP/1.1"

from werkzeug.serving import WSGIRequestHandlerを忘れないでください。

関連する問題