URL 길이

반응형

원인


통계 기능 개발 중 기간 범위를 넓게 잡으면 예외가 발생했다.

 

 

브라우저(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 방식으로 변경

반응형

+ Recent posts