>백엔드 개발 >PHP 튜토리얼 >URL_php 스킬 최대 길이 제한 관련 정보 확인

URL_php 스킬 최대 길이 제한 관련 정보 확인

WBOY
WBOY원래의
2016-05-16 20:27:451014검색

Alipay 인터페이스를 개발하고 디버깅하는 동안 갑자기 Alipay 인터페이스의 URL이 이전에 상상했던 255자보다 훨씬 더 긴 것을 발견했습니다. 빠르게 검색해서 확인한 결과 제가 이해한 바는 이렇습니다.

URL이 255바이트보다 클 수 없다는 것은 사실이며 RFC2616에 언급되어 있습니다.

코드 복사 코드는 다음과 같습니다.

HTTP 프로토콜은 URI 길이에 사전 제한을 두지 않습니다. 서버는 서비스하는 모든 리소스의 URI를 처리할 수 있어야 하며, GET 기반 형식을 제공하는 경우 무제한 길이의 URI를 처리할 수 있어야 합니다. 그러한 URI를 생성하십시오. URI가 서버가 처리할 수 있는 것보다 길면 서버는 414(Request-URI Too Long) 상태를 반환해야 합니다(섹션 10.4.15 참조).

참고: 서버는 255바이트를 초과하는 URI 길이에 따라 주의해야 합니다. 일부 이전 클라이언트 또는 프록시 구현에서는 이러한 길이를 제대로 지원하지 않을 수 있기 때문입니다.

이전 지점에서 볼 수 있듯이 255바이트라는 진술도 호환성상의 이유입니다. 실제로 최신 브라우저의 한계는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

Microsoft Internet Explorer(브라우저)
Microsoft는 Internet Explorer에서 URL의 최대 길이가 2,083자이며 URL의 경로 부분이 2,048자 이하여야 한다고 명시합니다. 내 테스트에서 이보다 긴 URL을 사용하려고 하면 Internet Explorer에서 명확한 오류 메시지가 표시됩니다.

Firefox(브라우저)
65,536자 이후에는 Windows Firefox 1.5.x에서 위치 표시줄에 더 이상 URL이 표시되지 않습니다. 그러나 100,000자 이후에는 더 긴 URL이 작동합니다.

사파리(브라우저)
최소 80,000자 이상은 작동합니다. 80,000자 이후에는 테스트를 중단했습니다.

오페라(브라우저)
최소 190,000자 이상은 작동합니다. 190,000자 이후에는 테스트를 중단했습니다. Windows용 Opera 9는 190,000자에서도 위치 표시줄에 완전히 편집 가능하고 복사 가능하며 붙여넣기 가능한 URL을 계속 표시했습니다.

아파치(서버)
웹 브라우저에서 최대 URL 길이를 측정하려는 초기 시도는 서버 URL 길이 제한인 약 4,000자에 부딪혔고 그 후 Apache에서 "413 Entity Too Large" 오류가 발생했습니다. 현재 발견된 최신 Apache 빌드를 사용했습니다. Red Hat Enterprise Linux 4. 공식 Apache 문서에는 요청의 개별 필드에 대한 8,192바이트 제한만 언급되어 있습니다.

Microsoft 인터넷 정보 서버
기본 제한은 16,384자입니다(예, Microsoft 웹 서버는 Microsoft 웹 브라우저보다 긴 URL을 허용합니다).

Perl HTTP::Daemon(서버)
최대 8,000바이트까지 작동합니다. Perl의 HTTP::Daemon 모듈을 사용하여 웹 응용 프로그램 서버를 구성하는 경우 모든 HTTP 요청 헤더의 결합 크기가 16,384바이트로 제한됩니다. 여기에는 POST 메서드 양식 데이터, 파일 업로드 등이 포함되지 않습니다. 이지만 실제로는 URL이 8,000자를 초과하면 413 오류가 발생합니다. 이 제한은 Daemon.pm에서 16×1024를 모두 찾아서 다음으로 대체할 수 있습니다. 물론, 서비스 거부 공격에 대한 노출도 높아집니다.

일부 기사에서 의 href 속성으로 사용할 경우 URL이 1024바이트를 초과할 수 없다고 언급한 점도 주목할 만하지만, 이는 자세히 확인되지 않았습니다

요약하자면, URL이 너무 길어서 적합하지 않습니다. 최후의 수단은 아닙니다. GET을 통해 많은 수의 매개변수를 제출하지 않는 것이 좋습니다(약 2M 정도). 서버 및 설정). 또한, 이렇게 긴 URL은 액세스하고 저장할 때 매우 불편합니다(일부 기사에서는 일부 브라우저에서도 매우 긴 주소를 저장할 때 문제가 있다고 언급했습니다). 물론 이전에는 데이터베이스 필드 설정이 여전히 255바이트로 처리되었지만 이제는 확장을 고려할 수도 있습니다.