Alipay 인터페이스를 개발하고 디버깅하는 동안 갑자기 Alipay 인터페이스의 URL이 이전에 상상했던 255자보다 훨씬 더 긴 것을 발견했습니다. 빠르게 검색해서 확인한 결과 제가 이해한 바는 이렇습니다.
URL이 255바이트보다 클 수 없다는 것은 사실이며 RFC2616에 언급되어 있습니다.
참고: 서버는 255바이트를 초과하는 URI 길이에 따라 주의해야 합니다. 일부 이전 클라이언트 또는 프록시 구현에서는 이러한 길이를 제대로 지원하지 않을 수 있기 때문입니다.
이전 지점에서 볼 수 있듯이 255바이트라는 진술도 호환성상의 이유입니다. 실제로 최신 브라우저의 한계는 다음과 같습니다.
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바이트로 처리되었지만 이제는 확장을 고려할 수도 있습니다.