[Spring] GET URL 범위 초과 문제 및 해결(feat.HTTP)
2020. 3. 15. 14:38
반응형
원인
통계 기능 개발 중 기간 범위를 넓게 잡으면 예외가 발생했다.
브라우저(Chrome) Console Log
Failed to load resource: the server responded with a status of 400 ()
Spring Log
2월 21, 2020 3:32:40 오후 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.fill(Http11InputBuffer.java:718)
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:462)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
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)
분석
RFC 2616 (하이퍼 텍스트 전송 프로토콜-HTTP / 1.1 – 섹션 3.2.1)에 따라 HTTP Get Request의 최대 URL 크기에 대한 제한은 없지만 브라우저와 서버단에서 제한을 적용 시킵니다.
제가 사용했던 브라우저인 크롬의 URL 제한 범위
URL 길이
일반적으로 웹 플랫폼 에는 URL 길이에 대한 제한이 없습니다 (2 ^ 31이 일반적인 제한 임). Chrome 은 실제적인 이유로 프로세스 간 통신에서 서비스 거부 문제가 발생하지 않도록 URL을 최대 2MB로 제한합니다.
VR 플랫폼에서는 1kB 제한이 사용되지만 대부분의 플랫폼에서 Chrome의 검색 주소창은 URL 표시를 32kB ( kMaxURLDisplayChars)로 제한합니다.
URL 길이가 제한을 초과하면 클라이언트가 합리적으로 동작하는지 확인하십시오.
- 원점 정보는 URL의 시작 부분에 나타나므로 끝을 잘라내는 것은 일반적으로 무해합니다.
- 가장자리의 경우 URL을 빈 문자열로 렌더링 하는 것은 이상적이지 않지만 잘리지 않는 (또는 예기치 않게 불안정한 경우) 더 나빠질 수 있습니다.
- 공격자는 긴 URL을 사용하여 시스템의 다른 부분을 악용할 수 있습니다. DNS 구문 은 정규화된 호스트 이름을 253 자로 제한하고 호스트 이름의 각 레이블레이블을 63 자로 제한하지만 Chromium의 GURL 클래스는 이 제한을 적용하지 않습니다.
크로미움 공식 사이트 제공
권장사항
URL을 2000 자 미만으로 유지하면 거의 모든 클라이언트 및 서버 소프트웨어 조합에서 작동합니다.
그리고 모든 클라이언트와 서버는 URL이 작동하는 여부에 관계없이 2048자 미만을 유지해야합니다.
해결책
1.GET URL parameter 줄이기
2.GET -> POST 방식으로 변경
반응형
'Spring' 카테고리의 다른 글
[Spring] 절대경로와 상대경로(feat.${pageContext.request.contextPath}) (0) | 2020.04.28 |
---|---|
[Spring] 갑자기 POST가 안되는 현상(feat.XSSFilter) (0) | 2020.03.15 |
[Spring] GET 파라미터(parameter) 데이터 받기 총 정리 (0) | 2019.12.15 |
[Spring] MyBatis 데이터 HashMap으로 받기 (0) | 2019.10.31 |
[Spring] @Scheduled (0) | 2019.10.30 |