5

nginx はチャンクされたリクエストをうまくサポートしていないようです。しかし、私はより決定的な(そして最新の)答えを得ようとしています。ヘッダーを設定する Java クライアントからサーバーに SOAP 要求を行うクライアントがありますTransfer-Encoding: chunked。Tomcat で自分のアプリケーションに直接接続すると、すべてうまくいきます。

しかし、それらの間にnginxを配置すると、問題が発生します。

いくつかの詳細を追加するには: 私は CloudFoundry を使用しています。Micro Cloud Foundry を使用して、nginx がなくても期待どおりに動作することを確認しています。しかし、私の要件は cloudfoundry.com を使用することなので、そこで nginx をバイパスすることはできません。

この質問と回答は、これがおそらく私の唯一の回避策であると言っています: http://wiki.nginx.org/NginxHttpChunkinModule。しかし、cloudfoundry.com の構成を変更できないため、その回避策は利用できません。

この質問も似ているように見えますが、実際にはこの要件の逆をカバーしています。チャンクされたリクエストではなく、チャンクされたレスポンスをカバーします。

では、これを回避するためにクライアントに何らかの変更を加えてみてはどうでしょうか? Transfer-Encoding: chunkedと の両方をContent-Length: 123ヘッダーとして送信することは可能ですか? この領域は私にとっては初めてのことですが、Apache HttpComponents のようなプロジェクトからは、長さまたはチャンクのいずれかを設定し、両方を設定することはないようです。チャンキングのポイントは、リクエストの開始時に長さを知る必要がないことです。クライアントに HTTP/1.0 を使用し、チャンクせずに nginx でうまくプレイするように指示できますか? 私が忘れている他の回避策のアイデアはありますか?

4

2 に答える 2

4

この質問のすべての部分に対する回答をまとめました。

ベース nginx は、チャンクされたリクエストをサポートしていません (Alexander が確認したように!)。Nginxは、NginXHttpCunkinModuleを使用してチャンクリクエストをサポートできます(私の質問が言及しているように)。より良い: このモジュールは、18 か月以上前にベータ版の状態から製品版の品質に移行しました。ベスト: 最近のミートアップで、CloudFoundry エンジニアリング チームの何人かのメンバーと話をしました。彼らは、このモジュールを nginx のバージョンに追加する予定であることを確認しています。問題が解決しました。(まあ、長期的には完全に解決されています。しかし、これがいつになるかについての正確な日付はありません。)

したがって、短期的な解決策も同様に優れています。見つけました。

アレクサンダーに向けられた私の質問に答える:チャンクされたメッセージで「Content-Length」を送信することはできません。これがチャンク メッセージの本当のポイントです。完全なコンテンツを取得する前にメッセージの送信を開始するため、まだ長さを知ることはできません。したがって、チャンクされたリクエストを避けるという彼の考えは正しいです。しかし、より実践的に言うと、「HTTP/1.1 ではなく HTTP/1.0 を使用してください」と言えます。これには、チャンクされたメッセージを送信しないという効果があります。このアイデアをテストするために、クライアントに一時的にパッチを当てることができました。出来た。ただし、公開パッチを展開する予定はありません。この 1 つの状況の問題を解決するために、全員に 10 年前のプロトコル (および 10 年前のサポートされていないクライアント ライブラリ!) を使用させるのは逆効果に思えます。

代わりに、必要に応じてハッキングされたクライアントを使用し、他の人がその必要性を見つけた場合はメールで通知し、CloudFoundry が HttpChunkin と HTTP/1.1 に更新されるのを待ちます。

于 2012-01-23T17:04:47.620 に答える
2

Nginxは実際にはチャンクリクエストをサポートしていません。ヘッダー411 Content Length requiredがない場合は戻ります。Content-Length

クライアントコードを制御しているので、チャンク化されたリクエストの使用を避け、明示的に指定するのが唯一の選択肢だと思いますContent-Length

于 2011-12-16T07:24:25.830 に答える