문제

브라우저 의존적입니까? 또한 다른 웹 스택은 요청에서 얻을 수있는 데이터의 양에 대해 다른 한계가 있습니까?

도움이 되었습니까?

해결책

RFC 2616 (하이퍼 텍스트 전송 프로토콜 - HTTP/1.1)에 따르면 쿼리 문자열의 길이에는 제한이 없습니다 (섹션 3.2.1). RFC 3986 또한 제한이 없지만 DNS 제한으로 인해 호스트 이름이 255 자로 제한되어 있음을 나타냅니다 (섹션 2.3.3).

사양은 최대 길이를 지정하지 않지만 웹 브라우저 및 서버 소프트웨어에 의해 실제 제한이 부과됩니다. 발견 된 연구를 바탕으로 boutell.com:

  • Microsoft Internet Explorer (브라우저)
    Microsoft에 따르면 인터넷 익스플로러에서 URL의 최대 길이는 2,083 자이며 URL 경로 부분에 2,048 자를 넘지 않습니다. 이보다 더 긴 URL을 사용하려는 시도는 Internet Explorer에서 명확한 오류 메시지를 생성했습니다.

  • Microsoft Edge (브라우저)
    한도는 약 81578자인 것으로 보입니다. 보다 Microsoft Edge의 URL 길이 제한

  • 크롬
    멈 춥니 다 표시 64K 문자 이후의 URL이지만 100K 이상의 문자를 제공 할 수 있습니다. 더 이상 테스트는 그 이상으로 수행되지 않았습니다.

  • Firefox (브라우저)
    65,536 자 후에 위치 막대는 더 이상 Windows Firefox 1.5.x에 URL을 표시하지 않습니다. 그러나 더 긴 URL이 작동합니다. 100,000 자 후에는 더 이상 테스트가 수행되지 않았습니다.

  • 사파리 (브라우저)
    최소 80,000자가 작동합니다. 테스트는 그 이상으로 시도되지 않았습니다.

  • 오페라 (브라우저)
    최소 190,000자가 작동합니다. 190,000 자 후에 테스트가 중지되었습니다. Windows 용 Opera 9는 190,000 문자로도 위치 표시 줄에 완전히 편집 가능한 복사 가능 및 페이스 가능한 URL을 계속 표시했습니다.

  • 아파치 (서버)
    웹 브라우저의 최대 URL 길이를 측정하려는 초기 시도는 약 4,000 자의 서버 URL 길이 제한에 부딪 히고 Apache는 "413 엔터티 너무 큰"오류를 생성합니다. Red Hat Enterprise Linux 4에서 발견 된 현재 최신 Apache 빌드가 사용되었습니다. 공식 아파치 문서는 요청에서 개별 필드에 8,192 바이트 한도 만 언급합니다.

  • Microsoft Internet Information Server (서버)
    기본 제한은 16,384 자입니다 (예, Microsoft의 웹 서버는 Microsoft의 웹 브라우저보다 더 긴 URL을 허용합니다). 이것은 구성 가능합니다.

  • perl http :: 데몬 (서버)
    최대 8,000 바이트가 작동합니다. Perl의 http :: Daomon 모듈로 웹 애플리케이션 서버를 구성하는 사람들은 모든 HTTP 요청 헤더의 결합 된 크기에 대해 16,384 바이트 한계를 만듭니다. 여기에는 메드 포스트 메드 양식 데이터, 파일 업로드 등이 포함되어 있지 않지만 URL이 포함됩니다. 실제로 URL이 8,000 자 미만인 경우 413 오류가 발생했습니다. 이 제한은 쉽게 제거 될 수 있습니다. Daemon.pm에서 16x1024의 모든 발생을 찾아 더 큰 값으로 교체하십시오. 물론 이것은 서비스 거부 공격에 대한 노출을 증가시킵니다.

다른 팁

공식적으로 제한은 없지만 많은 보안 구성 권장 사항에 따르면 서버의 MaxQueryStrings는 최대 문자 제한 1024로 설정되어야하며 쿼리 문자열을 포함한 전체 URL은 최대 2048 자로 설정해야합니다. 이는 웹 서버의 느린 HTTP 요청 취약점을 방지하여 Qualys 웹 애플리케이션 스캐너 및 기타 보안 스캐너에 표시되는 느린 DDOS 공격을 방지합니다.

web.config가있는 Windows IIS 서버의 아래 코드를 참조하십시오.

<security>
    <requestFiltering>
        <requestLimits maxQueryString="1024" maxUrl="2048">
           <headerLimits>
              <add header="Content-type" sizeLimit="100" />
           </headerLimits>
        </requestLimits>
     </requestFiltering>
</security>

다른 웹 스택은 다른 길이의 HTTP 요청을 지원합니다. Safari의 초기 스택은 4000 자만 지원했기 때문에 사용자 상태 때문에 ASP.NET 페이지를 처리하는 데 어려움이 있음을 경험했습니다. 이것은 심지어 게시물이므로 브라우저를 확인하고 스택 제한이 무엇인지 확인해야합니다. 새로운 브라우저에서도 한도에 도달 할 수 있다고 생각합니다. 나는 기억할 수 없지만 그들 중 하나 (IE6, 내 생각은) 16 비트 한도, 32,768 등의 한계를 가졌다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top