414 URI Too Long
사용법
414 URI Too Long 오류 메시지를 받으면 클라이언트는 서버가 더 짧은 HTTP 경로나 주소를 기대한다는 것을 이해합니다. 명세는 길이에 대한 어떤 요구 사항도 규정하지 않지만, 실무에서는 특정 유형의 공격을 막기 위해 브라우저가 크기를 제한합니다.
서버, 리버스 프록시, 프레임워크는 저마다 자체 URI 길이 제한을 둡니다. 흔한 기본값은 4 KB에서 8 KB 사이이지만, 최대치를 정의하는 명세는 없습니다.
414 URI Too Long 응답은 기본적으로 캐시 가능합니다.
SEO 영향
Google 같은 검색 엔진은 414 응답 상태를 가진 URL을 색인하지 않습니다. 이전에 색인된 URL은 검색 결과에서 제거됩니다.
예시
클라이언트가 서버가 허용하는 범위를 넘는 URI로 리소스를 요청합니다.
요청
GET /<...a_long_URI...> HTTP/1.1
Host: example.com
응답
HTTP/1.1 414 URI Too Long
해결 방법
가장 흔한 원인은 쿼리 매개변수가 너무 많거나 지나치게 긴 값이 URL에 인코딩된 GET 요청입니다. 매 순환마다 매개변수를 덧붙이는 리다이렉트 루프나 잘못 설정된 재작성 규칙도 이 오류를 유발합니다.
클라이언트 측 해결책:
nginx: 더 긴 요청 라인을 허용하도록 large_client_header_buffers를 늘리세요. 이 지시문은 버퍼 개수와 버퍼 크기 두 값을 받습니다. 예: large_client_header_buffers 4 32k. 적용하려면 nginx를 재시작하세요.
Apache: httpd.conf에서 LimitRequestLine을 더 큰 바이트 값으로 설정하세요. 기본값은 8190바이트입니다. URL이 긴 애플리케이션에서는 128000까지의 값이 흔합니다. 변경 후 Apache를 재시작하세요.
IIS: web.config 파일의 system.webServer > security > requestFiltering > requestLimits 아래에서 maxUrl과 maxQueryString을 편집하세요. 기본값은 URL 길이 4096바이트, 쿼리 문자열 2048바이트입니다. 이 값들은 실용적인 범위 내에서 최대한 낮게 유지하세요. URL 한도가 크면 주입 공격에 노출될 위험이 커집니다.
이 오류가 API가 아니라 브라우저에서 나타난다면, 특히 오래된 쿠키가 요청 헤더 크기를 서버 한도 너머로 부풀린 경우, 브라우저 캐시와 쿠키를 지우면 해결되기도 합니다.
코드 참고
.NET
HttpStatusCode.RequestUriTooLong
Rust
http::StatusCode::URI_TOO_LONG
Rails
:uri_too_long
:request_uri_too_long
Go
http.StatusRequestURITooLong
Symfony
Response::HTTP_REQUEST_URI_TOO_LONG
Python3.5+
http.HTTPStatus.REQUEST_URI_TOO_LONG
Java
java.net.HttpURLConnection.HTTP_REQ_TOO_LONG
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_REQUEST_URI_TOO_LONG
Angular
@angular/common/http/HttpStatusCode.UriTooLong