Tomcat : Request header is too large

    서버를 모니터링 중, 갑자기 간간히 헤더의 크기가 너무 크다는 에러 메세지가 발생하였다. 액세스 로그를 보니 실제 너무나 많은 행동을 한 유저로 인해서 유저가 행동을 하는 순간마다 에러가 계속 발생하였다.


    폰트를 작게하였는데도 엄청나게 많은 리퀘스트가 던져진 것이 보인다. 이 한명의 고래같은 행동을 한 유저를 위해서 서버의 설정을 바꾸기로 했다. 



    에러 로그


    04-Apr-2018 05:02:11.818 정보 [http-nio-9040-exec-103] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header

     Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

     java.lang.IllegalArgumentException: Request header is too large

            at org.apache.coyote.http11.Http11InputBuffer.parseHeaders(Http11InputBuffer.java:575)

            at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:703)

            at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

            at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)

            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)

            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

            at java.lang.Thread.run(Thread.java:748)



    프론트 단에서 Tomcat 기본 설정보다 큰 파라미터가 들어오는 바람에 위와 같이 헤더 크기가 너무 크다라는 에러가 발생했다. 이는 생각보다 해결하는 방법이 단순하다. 톰캣일 경우, server.xml에 설정을 하나 바꿔주면 된다.



    해결 방법

    1
    2
    3
    4
    5
    6
    7
    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
        <!-- A "Connector" using the shared thread pool-->
        <!--
        <Connector executor="tomcatThreadPool"
                   port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    cs



    위 톰캣 설정에서 헤더 사이즈를 늘려주면 된다(기본 8192 bytes)



    1
    2
    3
    4
    5
    6
    7
    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" maxHttpHeaderSize="30000"/>
        <!-- A "Connector" using the shared thread pool-->
        <!--
        <Connector executor="tomcatThreadPool"
                   port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />



    maxHttpHeaderSize를 30000 bytes로 늘렸다(각자 맞게 설정)




    반응형

    댓글

    Designed by JB FACTORY