1

Jettyのプロキシサーブレットを使用して、フロントエンドクライアントからCouchデータベースにリクエストをルーティングしています。プロキシに加えて、CouchDBによって使用される着信リクエストに追加の詳細を挿入しています。HTTPリクエストは、を拡張することで変更されHTTPServletRequestWrapperます。getContentLengthメソッドをオーバーライドしてのサイズを再計算するinputStreamと、元のリクエストのサイズのコンテンツのみがCouchDBに送信され、入力JSONが無効であるため、Couch DBはBadRequest(400 HTTP)コードを発行します。Jettyロガーでは、contentWritten != contentLengthメッセージ。Content-Lengthヘッダーを完全に削除すると、Jettyは期待どおりにリクエストを送信し、すべてのコンテンツをプロキシされたリクエストにコピーします。getContentLengthこのアプローチが機能する場合でも、のメソッドをオーバーライドして正しいコンテンツ長が設定されている場合でも、Jettyが変更されたリクエストコンテンツを送信しない原因は何でしょうかServletInputStream

Jetty 8.1.3バージョンを使用していますが、すべてのリクエストはJSONリクエスト/レスポンスです。ServletInputStreamクラスとメソッドもサブクラス化したread()ので、問題ないと思います。

4

1 に答える 1

0

これは、Jetty7.6.10-SNAPSHOTおよび8.1.10-SNAPSHOTで最近修正されたチャンクエンコーディングのバグです。 https://bugs.eclipse.org/bugs/show_bug.cgi?id=401382

Jetty-7で修正されました(その後、Jetty-8にマージされました)

oss.sonatype.orgSNAPSHOTSリポジトリからJetty7.6.10-SNAPSHOTまたは8.1.10-SNAPSHOTを使用できます。

7.6.10および8.1.10のリリースは、2013年3月の第1週に行われる可能性があります。

はい、Jetty-7とJetty-8は同じコードベースであり、並行して開発され、並行してリリースされていますが、唯一の違いは、それぞれがサポートするサーブレットの仕様です。(Jetty-7はサーブレット2.5、Jetty-8はサーブレット3.0です)

于 2013-02-26T04:07:36.747 に答える