そして、それは構成可能ですか?たとえば、200Kのクエリパラメータを持つURLが含まれるサーブレットに正常に通過するようにTomcatを設定できますか?
はい、大量のデータがある場合はPOSTを使用する必要があることを知っています。これは、この特定のケースではあまり快適ではないオプションです。含まれているアプリケーション(検索エンジン)は、GET要求が検索を実行することを期待しています。
そして、それは構成可能ですか?たとえば、200Kのクエリパラメータを持つURLが含まれるサーブレットに正常に通過するようにTomcatを設定できますか?
はい、大量のデータがある場合は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の最大長のサポートページについて報告しているため、HTTP GET要求の長さはRFC2616によって強制されません。
そのため、GETの最大長はクライアント(ブラウザ)関連の問題です。あなたのアプリが人々によって使用される場合、特定のブラウザを使用することを強制することができます、あなたは単にこのブラウザがサポートする長さを見つけることができます。
いずれの場合でも、クエリ文字列(サーバーサイドアプリのパラメーターをもたらすリクエストの一部、最終的にリクエストに含まれる「?」に続く部分)について、ブラウザー関連の問題についてWikypediaページを参照することをお勧めします。
もちろん、Tomcatはサーバー側にも制限を設けます。RFCによれば:
サーバーは、提供するリソースのURIを処理できなければならず、そのようなURIを生成できるGETベースのフォームを提供する場合、無制限の長さのURIを処理できる必要があります。URIがサーバーが処理できるよりも長い場合、サーバーは414(Request-URI Too Long)ステータスを返す必要があります(セクション10.4.15を参照)。
そのため、Tomcatに制限があるかどうかを簡単にテストし、この制限がエラーを与える非常に長いリクエストから始めて半分だけ異なるリクエストを使用していることを簡単に調べることができます。次に、二分法を使用して正確な値をすばやく見つけます。
Tomcatサーバー(.. \ Tomcat 6.0 \ conf \ server.xml)で構成を変更できます
<コネクタport = "8983" maxHttpHeaderSize = "100000" protocol = "HTTP / 1.1" connectionTimeout = "20000" redirectPort = "8443" />
server.xml
気付かずに、設定のデフォルトの8192の制限をスクラッチしているようで、突然ヒットしました。痛々しい落とし穴:それについて何もログに記録されていませんでした。接続は静かに切断されました(HTTPステータスはもう思い出せません)。以前にtomcat.apache.org/tomcat-5.5-doc/config/http.htmlのドキュメントを見つけましたがmaxHttpHeaderSize
、その名前や説明をGETリクエストクエリパラメータ自体に関連付けることもしませんでした。