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