2009-03-26 2 views
226

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

답변

217

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

관련 질문 : vartec 위에서 말했듯이 How big can a user agent string get?

+8

이 답변 최대 서버에서 헤더 크기를 받아 상태. 하지만 웹 서버 (예 : Apache)가 보낼 수있는 최대 헤더 크기는 얼마입니까? – Pacerier

+0

@Pacerier : 아파치는 8175 바이트로 보이지만 여전히 검색 중입니다. 또한 백엔드가 무엇이든 제한을 초과하면 유용한 오류 메시지가 나타날 것으로 예상하지 마십시오. – hakre

+1

@hakre : 전체 행에 대해 IIRC, 8K로 전체 헤더 행 (헤더의 이름, 공백 및 헤더의 페이로드)을 계산합니다. – vartec

167

에서, HTTP 스펙 그러나 많은 서버는 기본적으로 수행 제한을 정의하지 않습니다. 즉, 실제적으로 하한은 8K입니다. 대부분의 서버의 경우이 한도는 요청 줄과 ALL 헤더 입력란의 합계에 적용됩니다 (쿠키를 짧게 유지하십시오).

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

pagesize.c : gcc -o pagesize 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; 
} 

컴파일을 한 후 ./pagesize를 실행합니다. 내 우분투 서버에서 Linode 충실하게 대답은 4k입니다 알려줍니다.

+12

체크 코드 +1 –

+5

apache2의 경우 URL 길이가 'LimitRequestLine'에 의해 제어되고'LimitRequestFieldSize'가 각 HTTP 헤더 행에 개별적으로 적용됩니다 ... "sum of ..."이 아님 –

+1

쿠키의 총 _total_ 크기 제한 4093 바이트입니다. http://stackoverflow.com/questions/640938/what-is-the-maximum-size-of-a-web-browsers-cookies-key –

4

HTTP는 2.5 절에 바와 같이, 각 헤더 필드의 길이 또는 전체의 헤더 섹션의 길이에 소정의 제한을 두지 않는다. 개별 머리글 필드 길이에 대한 다양한 임시 제한 사항은 실제로 특정 필드 의미에 따라 실제로 발견됩니다.

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

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

대부분의 서버는 413 Entity Too Large 또는 적절한 4xx 오류를 반환합니다.

버리거나 클라이언트 필드 의미가 있는지 처리하고자보다 큰 수신 된 헤더 필드를 절단 할 수있는 클라이언트 같은 낙하 값 (들)이 안전하게 메시지 프레임을 변경하지 않고 무시 될 수 있는지 또는 응답 의미론.

캡슐 화되지 않은 HTTP 헤더 크기는 서버를 공격에 노출되게하여 유기적 트래픽을 처리 할 수있는 용량을 줄일 수 있습니다.

Source

0

는 또한 어떤 경우에는 많은 헤더의 경우 400분의 502에 대한 이유는 크기에 관계없이 때문에 헤더의 많은이 될 수 있다는 것을 발견했다. 워드 프로세서

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

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