[web-services] HTTP GET 요청의 최대 길이

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

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

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



답변

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

대부분의 웹 서버는 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 오류로 서버 별 오류 / 예외를 표시합니다.


답변

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

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

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

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

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

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

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


답변

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

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 에서이 질문을 참조하십시오 .


답변

비슷한 질문이 있습니다 : GET 요청의 길이에 제한이 있습니까?

한도에 도달하고 공유 호스팅 계정에 도달했지만 브라우저가 서버에 도착하기 전에 빈 페이지를 반환했습니다.


답변

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


답변

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


답변

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

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

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

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

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

응답

Chrome 브라우저를 사용하여 GET