HTTP GET 요청의 최대 길이


487

HTTP GET 요청 의 최대 길이는 얼마입니까?

서버가이 길이를 초과하는 GET 요청을 수신하면 리턴 할 수 있거나 응답해야하는 응답 오류가 있습니까?

이것은 브라우저 한계를 보는 것도 흥미롭지 만 웹 서비스 API와 관련이 있습니다.



7
@KillianDS URL의 최대 길이와는 전혀 관련이 없습니다. 문제는 최대 길이에 관한 요청 전송 URL을.
Lorne의 후작

2
@EJP는 GET의 '데이터'내용이 URI가 아닙니다.
KillianDS

@JimAho 귀하의 의견은 첫 번째 의견의 복제입니다 .....
Jun711

답변:


463

제한은 사용 된 서버와 클라이언트 (해당되는 경우 서버 또는 클라이언트가 사용중인 프록시)에 따라 다릅니다.

대부분의 웹 서버는 8192 바이트 (8KB)로 제한되며 일반적으로 서버 구성의 어느 곳에서나 구성 할 수 있습니다. 클라이언트 측면에서 HTTP 1.1 사양은 이것에 대해서도 경고합니다. 다음은 3.2.1 장의 추출입니다 .

참고 : 일부 이전 클라이언트 또는 프록시 구현은 이러한 길이를 제대로 지원하지 않을 수 있으므로 서버는 URI 길이가 255 바이트를 초과하는 것에주의해야합니다.

Internet Explorer 및 Safari의 제한은 약 2KB, Opera에서는 약 4KB, Firefox에서는 약 8KB입니다. 따라서 우리는 8KB가 가능한 최대 길이이고 2KB가 서버 측에 의존하기에 더 적합한 길이이고 255 바이트가 전체 URL이 들어오는 것으로 가정하는 가장 안전한 길이라고 가정 할 수 있습니다.

브라우저 나 서버에서 제한이 초과되면 대부분 경고없이 제한 밖에서 문자를 자릅니다. 그러나 일부 서버는 HTTP 414 오류를 보낼 수 있습니다 . 큰 데이터를 보내야하는 경우 GET 대신 POST를 사용하는 것이 좋습니다. 한계는 훨씬 높지만 클라이언트보다 사용 된 서버에 따라 다릅니다. 일반적으로 평균 웹 서버에서 최대 약 2GB가 허용됩니다. 서버 설정 어딘가에서 구성 할 수도 있습니다. 평균 서버는 POST 제한이 초과되면 일반적으로 HTTP 500 오류로 서버 별 오류 / 예외를 표시합니다.


6
브라우저 제한의 관점에서 질문에 대답합니다. HttpClient가 REST 서버와 상호 작용하는 데 사용되는 경우 GET과 POST 사이에 문제가있는 요청 크기 문제로 차이가 있는지 알고 있습니까?
aioobe

3
물론 POST는 본문을 사용하여 데이터를 보냅니다. HTTP 사양은 게시물에 특정 크기 제한을 부과하지 않습니다.
Ignacio A. Poletti

1
HTTP 사양에서 GET 및 DELETE 요청에 본문을 넣는 것은 완벽하게 허용됩니다. Java로 테스트했으며 작동합니다. 불행히도 여기에서 일부 프록시는 전신을자를 수 있습니다.
Nicolas Zozol

12
Get 및 Post 방법은 매우 특정한 의미를 가지므로 POST를 사용하여 GET을 수행하는 것은 해머를 사용하여 계란을 깰 때와 동일합니다.
nohros

18
@nohros 이상적으로는 사실이지만 GET에는 POST / PUT에 제한이 없습니다. 예를 들어, 많은 ID를 포함하는 매우 긴 쿼리를 수행하려고한다고 가정하십시오. 수백 개의 ID를 선택하는 경우 허용 가능한 URL 크기의 한계를 초과 할 수 있지만 POST에 해당 쿼리를 배치하면 개념 상 그다지 의미가 없어도이를 피할 수 있습니다. 개인적으로 HTTP 허용 GET 요청에 PUT 및 POST와 같은 본문이 있기를 바랍니다.
devios1

143

여기에 두 가지 별도의 질문이 있습니다.

HTTP GET 요청의 최대 길이는 얼마입니까?

이미 언급했듯이 HTTP 자체는 요청 길이에 대한 하드 코딩 된 제한을 부과하지 않습니다. 그러나 브라우저에는 2KB-8KB 범위가 있습니다 ( 오래된 브라우저를 계산하는 경우 255 바이트 ).

GET 요청을 수신 한 서버가이 길이를 초과하면 서버가 반환 / 반환해야한다는 응답 오류가 있습니까?

아무도 대답하지 않은 사람입니다.

HTTP 1.1은 414 Request-URI Too Long서버 정의 한계에 도달 한 경우의 상태 코드 를 정의합니다. RFC 2616 에 대한 자세한 내용을 볼 수 있습니다 .

클라이언트 정의 제한의 경우 서버가 요청을 전혀 수신하지 않기 때문에 서버가 무언가를 반환하는 의미가 없습니다.


23

브라우저 제한은 다음과 같습니다.

Browser           Address bar    document.location
                                 or anchor tag
---------------------------------------------------
Chrome                32779           >64k
Android                8192           >64k
Firefox                >64k           >64k
Safari                 >64k           >64k
Internet Explorer 11   2047           5120
Edge 16                2047          10240

더 원해? Stack Overflow 에서이 질문을 참조하십시오 .



3

기술적으로 URL 길이가 2000자를 초과하면 HTTP GET에 문제가 있음을 알았습니다. 이 경우 HTTP POST를 사용하거나 URL을 분할하는 것이 좋습니다.


2

이미 언급했듯이 HTTP 자체는 요청 길이에 대한 하드 코딩 된 제한을 부과하지 않습니다. 그러나 브라우저에는 GET 메소드에서 허용되는 2048 자로 제한됩니다.


-6

Chrome 브라우저를 사용하여 요청

예. GET 요청에는 제한이 없습니다.

Chrome 브라우저와 curl 명령을 모두 사용하여 쿼리 문자열의 일부로 최대 4000자를 보낼 수 있습니다.

예상 200 OK 응답을 반환 한 Tomcat 8.x 서버를 사용하고 있습니다.

다음은 Google Chrome HTTP 요청의 스크린 샷입니다 (보안상의 이유로 시도한 엔드 포인트 숨기기).

응답

Chrome 브라우저를 사용하여 GET

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.