1. 문제의 원인 프로젝트 출시 후 버그 통계의 첨부 파일 "Post-Release Problems"에는 다음과 같은 내용들이 있습니다:
경험 축적으로서 이러한 문제, 원인 및 해결책은 체크리스트에 포함되며, 다음과 같습니다: 첫 번째 질문: URL 매개변수의 상한선이 정확한 참조인가? 상한선은 얼마인가요? 두 번째 질문: 왜 POST 시 데이터 한도가 있나요? 한도가 128K인가요? 2. 문제 분석 1. 첫 번째 질문: 1) URL에는 매개변수의 상한선이 없습니다. 문제는 사실 IE가 URL에 길이 제한이 있다는 점입니다. 2) HTTP 프로토콜 명세는 URL의 길이를 제한하지 않습니다. 이 제한은 특정 브라우저와 서버에 의해 부과되는 제한입니다. IE의 URL 길이 제한은 2083바이트(2K+35)입니다. Netscape, FireFx 같은 다른 브라우저에는 이론적인 길이 제한이 없으며, 그 한계는 운영체제 지원 여부에 따라 달라집니다. [참고문헌 1] 3) "가변 길이 매개변수는 URL을 통해 전달된다"는 것은 양식 제출 시 GET 메서드를 사용한다는 의미이며, POST 메서드가 아닙니다. 이 잠재적 오류를 일으키는 원인은 GET 메서드를 사용해 양식 데이터를 제출하는 데 있습니다. GET 메서드가 URL에 있는 데이터를 서버로 전달하여 처리하기 때문입니다. 4) 이 제한은 매개변수 값 데이터 길이만이 아니라 전체 URL 길이임을 유의하세요. 5) URL 길이에 대한 IE의 한계이기 때문에, GET 메서드와 POST 메서드 모두 이 제한을 가집니다. (FORM [Ref. 2]의 GET 및 POST 방법에 대한 자세한 내용은 관련 문서를 참조하시기 바랍니다) 추천 사항: 1) 애플리케이션이 위치한 환경, 예를 들어 웹 애플리케이션의 브라우저 및 서버 환경을 이해하고, 그 특정 매개변수 제한을 이해합니다. 2) 복잡한 데이터를 제출할 때 가능한 한 POST 방법을 사용한다. 참고: FORM이 메서드 속성을 작성하지 않을 경우, 기본값은 GET 메서드를 사용하는 것입니다. 결론 (체크리스트에 작성): GET 메서드를 사용해 데이터를 제출할 때는 IE 환경에서 URL 길이 제한인 2083바이트를 고려해야 합니다. 2. 두 번째: 1) 이론적으로 POST에는 크기 제한이 없습니다. HTTP 프로토콜 명세에는 크기 제한도 없습니다. 2) "POST 데이터 크기 제한이 128K"라는 표현은 정확하지 않으며, POST 데이터에 제한이 없고 서버 프로세서의 처리 능력이 제한 역할을 합니다. 3) ASP 프로그램의 경우, 요청 객체가 각 폼 필드를 처리할 때 10만 개의 데이터 길이 제한이 있습니다. 하지만 Request.BinaryRead에서는 그런 제한이 없습니다. 10만 개 이상의 도메인 데이터를 처리해야 하는 솔루션은 아래 [참고문헌 3]을 참고하시기 바랍니다. 4) 확장하여 IIS 6.0에서는 보안상의 이유로 제한을 강화했습니다 [참조 4]. 또한 다음과 같은 점에 주의를 기울여야 합니다:
IIS 6.0은 기본적으로 최대 200 KB의 ASP POST 데이터를 허용하며, 각 폼 필드당 제한은 100 KB입니다.
IIS 6.0 업로드 파일의 기본 크기는 4MB입니다.
IIS 6.0은 기본적으로 최대 요청 헤더를 16KB로 설정합니다.
이러한 제한 사항은 IIS 6.0 이전에는 제공되지 않았습니다. 추천 사항: 1) 러닝 환경의 기본 설정을 알면 발생하는 문제를 설계하고 빠르게 해결하는 데 도움이 됩니다. 2) 서버 버전을 고려해야 합니다. 각 IIS 버전마다 이 매개변수에 대한 기본 설정이 다르므로, 필요하다면 정보를 찾아 비교 테이블을 작성하세요. 이렇게 해서 개발과 테스트에 대한 참고 자료가 생깁니다. 3) 이러한 IIS 6.0의 제한은 사실 기본 설정일 뿐이며, 실제 애플리케이션 환경에서 수정할 수 있습니다. WINNT/system32/inetsrv/MetaBase.xml에서 기본 정의는 다음과 같습니다: AspBufferingLimit="4194304"는 업로드된 파일의 최대 크기에 해당합니다 AspMaxRequestEntityAllowed="204800"은 POST의 최대 데이터 양에 해당합니다 ... 결론 (체크리스트에 작성): ASP를 사용할 때는 POST 폼의 일반 읽기 처리를 위해 필드당 100KB의 제한이 있다는 점을 고려해야 합니다. Request.Binary 사용을 고려해 보세요.
|