1

このように、Javaベースのアプリケーションサーバーが空の値の応答ヘッダーで応答するようにするにはどうすればよいですか?

content-length:\r\n

残念ながら電話すると

response.setHeader("Content-Length", len)

lenが空の文字列またはnullの場合、応答にはヘッダーが含まれません。

HttpServletResponseとHttpServletResponseWrapperjavadocsを確認しましたが、カスタム動作を提供するために何をオーバーライドできるかがわかりませんでした。

バックグラウンド

動作の悪いHTTPサーバーシナリオをエミュレートすることになっているテストアプリケーションを構築しています。アプリケーションは、上記の場合のような不正な形式のものを含め、プリセットページとHTTPヘッダーを使用してリクエストに応答することになっています。アプリケーションはgrailsで書かれています。

4

3 に答える 3

1

Firefox 拡張機能を備えたSoapUIFiddlerなどのツールを試すことができます。不正な形式のヘッダーを設定しようとしたことはありませんが、できたとしても驚かないでしょう。

于 2011-06-24T15:16:08.780 に答える
1

私は、動作の悪い HTTP サーバー シナリオをエミュレートすることになっているテスト アプリケーションを構築しています。

そのような場合、正常に動作するサーバーにそのような動作を模倣させようとするのは悪い考えです。悪いサーバー、またはテストしたい特定の一連のシナリオを模倣する必要がある場合は、次のいずれかを実行できます。

  • 不正な HTTP ヘッダーで応答する特定のポート (ServerSocket クラスを使用) をリッスンするカスタム アプリケーションを作成します。ライブラリにはエラー状態を検出して自動的に修正するコードが含まれている場合があるため、HTTP ライブラリを使用しても役に立たない場合があります。
  • 応答を傍受でき、これらの応答の変更を可能にする HTTP プロキシを使用します。「http デバッグ プロキシ」を Google で検索するといくつか見つかりますが、聞いたことがない場合は、FiddlerWebScarab、またはBurpを調べることをお勧めします。
于 2011-06-24T15:24:25.183 に答える
0

あなたのアプリケーションは Grails で書かれていますが、Javadoc について話し合っています...まあ、JAVA で悪いサーバーを作成しようとしていると思います...

あなたが言ったように、「Content-Length:\r\n」で答えるのはHTTPでは合法ではありません。整数値を入れるか、ヘッダーを破棄する必要があります。setHeader() は、不正な HTTP メッセージの生成を回避するのに役立つと思います。

この方法でヘッダーを手動で作成することで回避できます (setHeader ブロックを使用せずにソケットに直接書き込むことができます)。

他の解決策は、HttpServletResponse の独自の実装を使用して (サーブレットに加えて) フィルターを作成することです。この実装をサーブレットに渡します。

于 2011-06-24T15:16:25.343 に答える