Webアプリケーション自動生成ツールを使用して、JavaベースのWebアプリを開発をしていたときに直面した課題。ある日、以下のようなエラーログが出力された。
1 2 3 4 5 |
More than the maximum number of request parameters (GET plus POST) for a single request ([10,000]) were detected. Any parameters beyond this limit have been ignored. To change this limit, set the maxParameterCount attribute on the Connector. |
ざっくり和訳すると「リクエストパラメータの上限を超えました。超えた分のパラメータは無視されます。上限を変えるにはConnectorのmaxParameterCountを参照してください」とのこと。
catalina.outに出力されていたけど、特にTomcatとしてエラーになることなくこのログが出力されていた。しかし、パラメータが無視されたらまともに動かない。。。
これまでスクラッチで開発する場合は、パラメータの数は自分で把握できていたのですが、今回はある程度コーディングしなくてもいいWebアプリケーション自動生成ツールを使用したためにパラメータの数は自分で把握していませんでした。maxParamterCountのデフォルト値が10,000だったので、とりあえず20,000に変更したら解消しました。
また、これを機にmaxParamterCountに加えて、maxPostSizeも見直した方がよいことが分かりました。設定は、{Tomcatインストールディレクトリ}/conf/server.xml。それぞれの詳細は以下。
パラメータ | 内容 |
maxParamterCount |
The maximum number of parameter and value pairs (GET plus POST) which will be automatically parsed by the container. Parameter and value pairs beyond this limit will be ignored. A value of less than 0 means no limit. If not specified, a default of 10000 is used. Note that FailedRequestFilter filter can be used to reject requests that hit the limit. →要約すると、「最大パラメータ数。超えた分は無視される。0以下をセットすると無制限。指定が無い場合はデフォルト値の10,000となる。」 |
maxPostSize |
The maximum size in bytes of the POST which will be handled by the container FORM URL parameter parsing. The limit can be disabled by setting this attribute to a value less than zero. If not specified, this attribute is set to 2097152 (2 megabytes). Note that the FailedRequestFilter can be used to reject requests that exceed this limit. →要約すると、「POSTリクエストの最大サイズ(バイト)。0以下を設定すると無制限になる。指定されていない場合は、2MBとなる。」 |
公式サイト→http://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html
設定例
1 2 3 4 5 6 |
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true" maxPostSize="4194304" maxParameterCount="50000" /> |