source

플라스크/Ajax HTTP 연결을 유지하는 방법?

manycodes 2023. 11. 7. 21:00
반응형

플라스크/Ajax HTTP 연결을 유지하는 방법?

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); },
      });

플라스크 방법은 다음과 같습니다.

@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"}

그러나 플라스크는 살아있지 않고 대답합니다.

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

킵얼라이브가 시행되지 않는 것이 정말 그런 경우입니까?

기본 request_handler는 WSGIRquestHandler입니다.

전에app.run(), 한 줄 더하면,WSGIRequestHandler.protocol_version = "HTTP/1.1"

잊지 마세요.from werkzeug.serving import WSGIRequestHandler.

Werkzeug의 통합 웹 서버는 Base를 기반으로 구축됩니다.Python 표준 라이브러리의 HTTPS 서버.기본 HTTP 서버는 HTTP 프로토콜 버전을 1.1로 설정하면 Keep-Alives를 지원하는 것 같습니다.

Werkzeug는 하지 않지만 Flask가 Werkzeug의 BaseWSG 서버를 인스턴스화하기 위해 사용하는 기계를 해킹할 준비가 되었다면 직접 할 수 있습니다.Flask.run()어느쪽이werkzeug.serving.run_simple(). 당신이 해야 할 일은 결국.BaseWSGIServer.protocol_version = "HTTP/1.1".

저는 해결책을 시험해 보지 않았습니다.플라스크의 웹 서버는 개발용으로만 사용되어야 한다는 것을 알고 계실 겁니다.

언급URL : https://stackoverflow.com/questions/10523879/how-to-make-flask-keep-ajax-http-connection-alive

반응형