HTTPリクエスト(POST)フィールドのサイズ制限& JSPのRequest.BinaryRead
質問
最初に私のJavaは錆びており、JSPやサーブレットは一度もやったことがありませんが、他の誰かが問題を解決できるように手助けしようとしています。
JavaScriptによってレンダリングされたフォームがJSPにポストバックしています。 このフォームのフィールドの一部は、サイズが100KBを超えています。 ただし、JSP側でフォームフィールドを取得する場合、フィールドの値は100 KBに切り捨てられます。
ASP Request.Formには、Request.BinaryReadを使用して回避できる同様の問題があることがわかりました。 Javaに同等のものはありますか?
または、同じ問題を回避する設定がWebsphere / Apache / IBM HTTP Serverにありますか?
解決 2
問題を解決しました。 判明したため、Webサーバーの設定とは関係なく、投稿で何も切り捨てられていませんでした。
投稿前のフォームフィールドはJavaScriptによって102399バイトサイズのチャンクに分割され、各チャンクは値としてフォームフィールドに追加されたため、値の配列になりました。 Request.Form()はこれらの値を自動的に連結して単一の巨大な文字列を再現するように見えますが、Java getParameter()はそうではありません。 ただし、getParameterValues()を使用して、返された値から文字列を再構築すると、うまくいきませんでした。
他のヒント
ServletRequest APIに必要な機能を提供するには、サーブレットコンテナがポストされたリクエストをメモリ内に保持する必要があるため、ほとんどのサーブレットコンテナには、DoS攻撃を防ぐためのサイズ制限が設定可能です。メモリーが不足するサーバー。
WebSphereが適切に失敗するのではなく、静かにリクエストを切り捨てるのは少し奇妙ですが、これが問題の原因である場合、構成オプション WebSphereのドキュメント。
getInputStream (rawバイト)または getReader (デコードされた文字データ)を使用して、リクエストからデータを読み取ります。注どのようにこれパラメータの読み取りと相互作用します。サーブレットを使用したくない場合は、フィルターからラップリクエスト。
私は、WebSphereがデータをWebSphere意的に切り捨てるのではなく、リクエストを拒否することを期待しています。他の場所でバグが疑われる。