5

チャンク化されたエンコードされたデータをWebサーバーに投稿するj2meクライアントがあります。Pythonでデータを処理したい。スクリプトは CGI スクリプトとして実行されていますが、どうやら apache は CGI スクリプトへのチャンク エンコードされたポスト リクエストを拒否するようです。私が mod_python を見る限り、WSGI と FastCGI もダメです。

Pythonスクリプトでこの種の入力を処理する方法があるかどうか知りたいです。私はどんな提案にもオープンです (たとえば、チャンクを組み立てる apache2 の構成設定、同じことを行うスタンドアロンの python サーバーなど)。かなり奇妙。

サーバー側でJavaに頼ることが解決策になることは知っていますが、これがapache + pythonで解決できないとは想像できません。

4

5 に答える 5

6

1 年前、Python/Ruby バックエンドと通信する J2ME クライアントでまったく同じ問題が発生しました。アプリケーションまたはインフラストラクチャ レベルの変更を必要としない唯一の解決策は、mod_proxy の比較的知られていない機能を使用することでした。

Mod_proxy には、着信 (チャンク) リクエストをバッファリングし、プロキシ バックエンドに渡す前に Content-Length ヘッダーを使用して単一のリクエストとして書き換える機能があります。巧妙なトリックは、要求を同じ Apache サーバーに戻す小さなプロキシ構成を作成できることです。つまり、ポート 80 で着信チャンク リクエストを取得し、それを「デチャンク」してから、ポート 81 で非 HTTP 1.1 準拠のサーバーに渡します。

この構成を本番環境で 1 年余り使用しましたが、問題はありませんでした。次のようになります。

ProxyRequests Off

<Proxy http://example.com:81>
  Order deny,allow
  Allow from all
</Proxy>

<VirtualHost *:80>
  SetEnv proxy-sendcl 1
  ProxyPass / http://example.com:81/
  ProxyPassReverse / http://example.com:81/
  ProxyPreserveHost On
  ProxyVia Full

  <Directory proxy:*>
    Order deny,allow
    Allow from all
  </Directory>

</VirtualHost>

Listen 81

<VirtualHost *:81>
  ServerName example.com
  # Your Python application configuration goes here
</VirtualHost>

また、問題の完全な記事と解決策の詳細については、ブログを参照してください。

于 2009-07-27T11:51:03.947 に答える
2

mod_pythonではやりたいことができません。バージョン3.0を使用している場合は、mod_wsgiを使用して実行できます。ただし、WSGIはチャンクされたリクエストコンテンツを効果的に禁止しているため、WSGI1.0仕様の範囲外に踏み出す必要があります。

必要なものについては、 http: //code.google.com/p/modwsgi/wiki/ChangesInVersion0300でWSGIChunkedRequestを検索してください。

于 2009-07-29T00:13:45.113 に答える
2

httpリスナーを構築するには、ねじれたフレームワークを使用することをお勧めします。Twisted は、チャンク エンコーディングをサポートしています。

http://python.net/crew/mwh/apidocs/twisted.web.http._ChunkedTransferEncoding.html

お役に立てれば。

于 2008-11-12T17:56:15.650 に答える
2

Apache 2.2 mod_cgi は問題なく動作します。Apache は、リクエストが CGI アプリケーションに渡されるときに透過的にチャンクを解除します。

WSGI は現在、チャンクされたリクエストを許可しておらず、mod_wsgi は実際に 411 レスポンスでそれらをブロックしています。これは、WSGI 2.0 の設計図に載っています。しかし、チャンク リクエストを実行するものを見つけたおめでとうございます。これまでに見たことのないものです。

于 2008-11-12T18:32:21.363 に答える
1

多分それは構成の問題ですか?Django は、mod_python、WSGI、および FastCGI によって Apache の前に配置でき、ファイルのアップロードを受け入れることができます。

于 2008-11-12T18:29:05.957 に答える