そしてそれは構成可能ですか?たとえば200Kのクエリパラメータを持つURLが含まれているサーブレットに正常に通過するようにTomcatを設定できますか?
はい、私は1つPOSTを使用する必要があることを知っています。大量のデータがある場合、これはこの特定のケースではあまり好ましくないオプションです。含まれているアプリケーション(検索エンジン)は、GETリクエストで検索を実行することを期待しています。
Tomcat/conf/server.xmlのHTTP/1.1コネクタエントリを編集し、maxHttpHeaderSize = "65536"を追加して、デフォルトの最大値である8Kから64Kに増やすことができます。この数は必要なだけ増やすことができると思いますが、現時点では64Kで十分なので、まだ試していません。
<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />
Microsoftが IE max length support page について報告しているように、HTTP GETリクエストの長さはRFC2616によって強制されません。
したがって、最大GETの長さはクライアント(ブラウザ)関連の問題です。アプリが人々によって使用されている場合、特定のブラウザーを強制的に使用することができ、このブラウザーがサポートする長さを簡単に見つけることができます。
いずれの場合も、クエリ文字列(サーバー側アプリのパラメーターをもたらすリクエストの一部で、最終的には「?」に続くもの)に関するブラウザー関連の問題について Wikypedia ページを参照することをお勧めしますリクエスト。
もちろん、Tomcatもサーバー側に制限を設けるでしょう。 RFCは言う:
サーバーは、サービスを提供するすべてのリソースのURIを処理できなければならず(MUST)、そのようなURIを生成できるGETベースのフォームを提供する場合は、無制限の長さのURIを処理できる必要があります(SHOULD)。 URIがサーバーが処理できる長さより長い場合、サーバーは414(Request-URI Too Long)ステータスを返す必要があります(セクション10.4.15を参照)。
したがって、Tomcatに制限があるかどうかを簡単にテストし、この制限が、非常に長いリクエストから始まってエラーが発生し、半分になる異なるリクエストを単に使用していることを確認できます。次に、二分法を使用して正確な値をすばやく見つけます。
AJPコネクターの場合、packetSize
属性を調整する必要があります。
<Connector port="8009"
protocol="AJP/1.3"
packetSize="65536" />
Tomcatサーバー(..\Tomcat 6.0\conf\server.xml)で設定を変更できます
<Connector port = "8983" maxHttpHeaderSize = "100000" protocol = "HTTP/1.1" connectionTimeout = "20000" redirectPort = "8443" />