13

Flask Webサービスを機能させようとしていますが、投稿のストリーミングに問題があります。つまり、ヘッダーにTransfer-Encoding:chunkedが含まれている場合です。

デフォルトのフラスコはHTTP1.1をサポートしていないようです。これに対する回避策はありますか?

このコマンドを実行しています:

$ curl -v -X PUT  --header "Transfer-Encoding: chunked" -d @pylucene-3.6.1-2-src.tar.gz "http://localhost:5000/async-test"

このコードに対して:

@app.route("/async-test", methods=['PUT'])
def result():
    print '------->'+str(request.headers)+'<------------'
    print '------->'+str(request.data)+'<------------'
    print '------->'+str(request.form)+'<------------'
    return 'OK'

カールの出力は次のとおりです。

$ curl -v -X PUT  --header "Transfer-Encoding: chunked" -d @pylucene-3.6.1-2-src.tar.gz "http://localhost:5000/async-test"
* About to connect() to localhost port 5000 (#0)
*   Trying ::1... Connection refused
*   Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 5000 (#0)
> PUT /async-test HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
> Host: localhost:5000
> Accept: */*
> Transfer-Encoding: chunked
> Content-Type: application/x-www-form-urlencoded
> Expect: 100-continue
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: text/html; charset=utf-8
< Content-Length: 2
< Server: Werkzeug/0.8.3 Python/2.7.1
< Date: Wed, 02 Jan 2013 21:43:24 GMT
<

そして、Flaskサーバーの出力は次のとおりです。

* Running on 0.0.0.0:5000/ 
------->Transfer-Encoding: chunked
 Content-Length:
 User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
 Host: localhost:5000
 Expect: 100-continue
 Accept: */*
 Content-Type: application/x-www-form-urlencoded

 <------------
 -------><------------
 ------->ImmutableMultiDict([])<------------
4

2 に答える 2

6

Flask Python ではなく、mod_wsgi です。mod_wsgi バージョン 3.0+ のみがチャンク HTTP 転送のサポートを開始しました。Flask Python は内部的に Werkzeug ツールキットを mod_wsgi へのインターフェイスとして使用します。apt ソースからインストールした場合、古いバージョンである可能性があります。

mod_wsgi の最新バージョンをコンパイルしてから、Flask フレームワークをインストールしてみてください。問題が解決する場合があります。

于 2013-02-28T12:25:20.430 に答える