技術メモのかけら

内容はもとより調べたことすら忘れてしまうので個人的なメモです。とにかく短く、結論だけ書いていきます。

TomcatのmaxParameterCount

POSTしているはずの項目がサーバ側で取得できない事象が発生。 大量にPOSTした場合だけに発生するので単純なアプリのバグではない。 Tomcatのログ(catalina.out)にログが吐かれていた。

INFO: 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.

Tomcatはデフォルトで10,000を超えるリクエストパラメータを無視するようで、 無視したよ、ってのが上記ログ。 パラメータを捨てられたらまともに動かないので、エラーにしてくれればいいのにと思う。

今回は欠落しているのが分かりやすいパラメータだったから良かったが、物によってはしばらく気づかない厄介なバグを生みそう。

本当は10,000を超えるをどうにかした方が良いんだろうが、現状は直せないのでserver.xmlにパラメータを追加した。

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           maxParameterCount="20000" />

なお、0かマイナスの値を制限すると無制限になるようである。

http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#Common_Attributes