URL의 백분율 기호로 인해 HTTP 400 잘못된 요청 오류가 발생하는 이유는 무엇입니까?


22

내 웹 브라우저에서 웹 페이지의 URL을 잘못 입력했을 때 우연히이 문제를 발견했습니다.

방문으로 http://example.com/%인해 HTTP 400 잘못된 요청 오류가 발생하는 이유는 무엇 입니까? 서버가 퍼센트 기호 이후 또는 앞에 다른 것을 기대하고 있습니까?

Apache 및 Nginx 서버에서 발생하는 것으로 보입니다.


답변:


32

짧은 답변

당으로 RFC 3986 , 베어 %문자는 유효하지 않은 URI의 구문; 그 뒤에 두 개의 의미있는 16 진 숫자 가 와야합니다 .

긴 대답

얻은 HTTP 상태 코드는 4xx클래스에 속합니다 .

4xx: Client Error - The request contains bad syntax or cannot be fulfilled

출처 : HTTP (Hypertext Transfer Protocol) 상태 코드 레지스트리

특히 코드 400RFC 2616의 IETF ( Internet Engineering Task Force )에 의해 정의됩니다 .

10.4.1 400 잘못된 요청

구문이 잘못되어 서버에서 요청을 이해할 수 없습니다. 클라이언트는 수정없이 요청을 반복해서는 안됩니다.

출처 : RFC 2616-하이퍼 텍스트 전송 프로토콜-HTTP / 1.1

인용 위키피디아 (굵게 강조된 광산) :

URI에서 허용되는 문자는 예약 되거나 예약되지 않은 문자 ( 또는 퍼센트 인코딩의 일부인 퍼센트 문자 )입니다.

소스 : 퍼센트 인코딩-URI의 퍼센트 인코딩

리터럴 %기호 를 삽입 하려면 퍼센트 인코딩 된 표현을 사용해야합니다 %25.

추가 자료


나는 그것을 얻지 못한다. '% 25'로 '%'기호를 마스킹하면 파일이 계속 제공되지 않지만 시나리오 (Apache-> JKMount-> Tomcat)에서 오류 400이 발생합니다.
fiffy

RewriteRule (.*) xyz/$1.htaccess에 다음 RewriteRule (여기서 xyz는 임의의 폴더 이름)이있는 경우 %를 % 2525로 두 번 인코딩 해야합니다 .
마르코 마르 살라

9

퍼센트 부호는 일반적으로 URL에서 지원되지 않는 문자를 삽입하기위한 것입니다. 예를 들어 % 20은 공백과 같습니다.


4
그리고 퍼센트 문자 자체를 삽입, 그건%25
보스는 죽은 채로 머물러야

A +는 공백을 인코딩하는 가장 빠른 방법입니다. 실제 더하기 부호를 원하면 16 진수 코드 % 2B를 사용하십시오.
Phil Perry

3
+는 쿼리 문자열 내에서만 공간에 대한 올바른 인코딩입니다. % 20은 URL의 다른 곳에서 올바른 인코딩입니다.
Eden Townsend
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.