[http] http 헤더 값의 최대 값?

HTTP 헤더에 허용되는 최대 크기가 있습니까? 그렇다면 무엇입니까? 그렇지 않은 경우 이것은 서버에 특정한 것이거나 어떤 크기의 헤더를 허용하는 표준입니까?



답변

아니요, HTTP는 제한을 정의하지 않습니다. 그러나 대부분의 웹 서버는 허용하는 헤더 크기를 제한합니다. 예를 들어 Apache 기본 제한 은 8KB이고 IIS는 16K 입니다. 413 Entity Too Large헤더 크기가 해당 제한을 초과하면 서버에서 오류 를 반환 합니다.

관련 질문 : 사용자 에이전트 문자열은 얼마나 커질 수 있습니까?


답변

vartec이 위에서 언급했듯이 HTTP 사양은 제한을 정의하지 않지만 많은 서버가 기본적으로 사용합니다. 이것은 실제로 하한이 8K 임을 의미 합니다. 대부분의 서버에서이 제한 은 요청 라인과 모든 헤더 필드합계에 적용 되므로 쿠키를 짧게 유지하십시오.

nginx는 기본적으로 시스템 페이지 크기 (대부분의 시스템에서 4K)를 사용합니다. 이 작은 프로그램으로 확인할 수 있습니다 :

pagesize.c :

#include <unistd.h>
#include <stdio.h>

int main() {
    int pageSize = getpagesize();
    printf("Page size on your system = %i bytes\n", pageSize);
    return 0;
}

gcc -o pagesize pagesize.c다음으로 컴파일하고 실행하십시오 ./pagesize. Linode의 우분투 서버 는 정답이 4k라고 알려줍니다.


답변

HTTP는 2.5 절에서 설명한 것처럼 각 헤더 필드의 길이 또는 헤더 섹션의 길이에 미리 정의 된 제한을 두지 않습니다. 개별 헤더 필드 길이에 대한 다양한 임시 제한은 실제로 특정 필드 의미에 따라 실제로 발견됩니다.

HTTP 헤더 값은 서버 구현에 의해 제한됩니다. HTTP 사양은 헤더 크기를 제한하지 않습니다.

처리하고자하는 것보다 큰 요청 헤더 필드 또는 필드 세트를 수신하는 서버는 반드시 적절한 4xx (클라이언트 오류) 상태 코드로 응답해야합니다. 이러한 헤더 필드를 무시하면 밀수 공격을 요청하는 서버의 취약성이 증가합니다 (9.5 절).

413 Entity Too Large이 문제가 발생하면 대부분의 서버가 반환 되거나 적절한 4xx 오류가 발생합니다.

필드 시맨틱이 메시지 프레이밍 또는 응답 시맨틱을 변경하지 않고 드롭 된 값 (들)을 안전하게 무시할 수있는 경우, 클라이언트는 처리하고자하는 것보다 큰 수신 된 헤더 필드를 폐기 또는 절단 할 수있다 (MAY).

캡핑되지 않은 HTTP 헤더 크기는 서버가 공격에 노출되도록하며 유기적 인 트래픽을 처리하는 능력을 떨어 뜨릴 수 있습니다.

출처


답변

가장 인기있는 웹 서버의 한계는 다음과 같습니다

  • 아파치-8K
  • Nginx-4K-8K
  • IIS-8K-16K
  • 톰캣-8K – 48K

답변

또한 경우에 따라 많은 헤더의 경우 502/400의 이유는 크기에 관계없이 많은 수의 헤더 때문일 수 있습니다. 문서에서

tune.http.maxhdr 요청의 최대 헤더 수를 설정합니다. 요청에이 값보다 많은 헤더가 있으면 (첫 번째 줄 포함) “400 잘못된 요청”상태 코드로 거부됩니다. 마찬가지로 “502 Bad Gateway”로 너무 큰 응답이 차단됩니다. 기본값은 101이며, 광범위하게 배포 된 Apache 서버가 동일한 제한을 사용한다는 점을 고려하면 모든 사용에 충분합니다. 버그가있는 애플리케이션이 수정 될 때까지 일시적으로 작동하도록이 한계를 더 높이는 것이 유용 할 수 있습니다. 각각의 새로운 헤더는 각 세션마다 32 비트의 메모리를 소비하므로이 한계를 너무 높이 지 마십시오.

https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr


답변