개요
이번 글에서는 Tomcat에서 HTTP POST 요청시 파라미터의 최대 크기와 개수에 관한 옵션들에 대해 이야기 해보려고 한다.
배경
사내 운영툴에서 게임의 확률표를 에디터를 통해 등록해야 하는데 등록이 안된다는 제보를 받았다.
이슈를 해결하기 위해 처음에는 확률표 공지와 같은 긴 글이 서버에 요청하는 데이터가 커서 해당 DB 컬럼에 데이터가 들어가지 못하는 줄 알고 해당 컬럼을 2개로 분할하여 INSERT 및 일괄 UPDATE 되도록 처리했지만 문제가 여전히 발생했다.
위 방법으로도 이슈가 해결되지 않아 WAS쪽을 살펴보다 Tomcat의 파라미터의 최대 크기와 개수에 대해 찾아보고 이를통해 문제를 해결하게 되며 알게된 내용들에 대해 설명하려고 한다.
환경
- Tomcat7
Tomcat에서 Post 요청시 파라미터의 최대 크기와 개수
Tomcat7 기준으로 파라미터의 최대 크기(size)는 Default 값으로 2097152 (2MB)로 잡혀있다.
또한 파라미터의 최대 개수는 Default로 10000개로 설정되어 있다.
Spring에서는 2MB 이상의 문자열을 파라미터로 Post 요청했을 때 아래와 같은 오류가 나오며 요청에 실패하기도 한다.
Request method 'POST' not supported - o.s.w.s.m.s.DefaultHandlerExceptionResolver.handleHttpRequestMethodNotSupported:194
Tomcat에서 파라미터의 최대 크기와 개수 설정하기
그럼에도 불구하고 2MB가 넘는 파라미터 값을 보내야 하거나 10000개 이상의 파라미터를 전달해야 하는 경우가 존재한다.
이때는 Tomcat의 설정을 통해 파라미터의 최대 크기와 개수를 설정해 줄 수 있다.
Tomcat의 server.xml 파일을 열어보면 Connector 설정 부분이 있고 이 부분에 파라미터에 관련된 옵션을 추가해주면 된다.
파라미터의 크기에 관련된 설정 값을 수정하고 싶으면 아래와 같이 maxPostSize 옵션을 추가하고
파라미터의 개수에 관련된 설정 값을 수정하고 싶으면 아래와 같이 maxParameterCount 옵션을 추가해주면 된다.
이때 maxPostSize, maxParameterCount 설정 값을 0보다 작은 값으로 주게 된다면 무제한을 의미하게 된다.
꼭 무제한이 아니더라도 필요에 따라서 직접 크기를 설정해주면 된다.
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" maxPostSize="-1" maxParameterCount="30000"/>