는 RFC2396의 section 2.4.1에 정의되어있다 (통일 자원 식별자) :
An escaped octet is encoded as a character triplet, consisting of the
percent character "%" followed by the two hexadecimal digits
representing the octet code. For example, "%20" is the escaped
encoding for the US-ASCII space character.
escaped = "%" hex hex
hex = digit | "A" | "B" | "C" | "D" | "E" | "F" |
"a" | "b" | "c" | "d" | "e" | "f"
이 RFC는 section 3.3에 path
구성 요소에 대한 예약 문자를 정의 : 그래서
Within a path segment, the characters "/", ";", "=", and "?" are reserved.
이 deprecated 및 encodeURI()
이기 때문에 encodeURIComponent()을 사용해야합니다.위의 RFC 발췌문에 따라 이스케이프해야합니다.
아래 예제는 단지
encodeURIComponent()
제대로 슬래시를 탈출한다 (이 가장 가능성이 당신이 직면하고있는 문제의 원인이 문자입니다) 보여줍니다
: 그러나 유의하시기 바랍니다
>>> escape('//');
"//"
>>> encodeURI('//');
"//"
>>> encodeURIComponent('//');
"%2F%2F"
가 가능하다면, 당신은해야 사용 GET 대신 POST. 이는 서버 (GET)에서 데이터를 가져 오는 대신 클라이언트에서 서버 (POST)로 데이터를 전송할 때 REST (및 일반적으로)에서 사용하는 올바른 방법입니다.
POST를 사용하면 추가 문제를 피할 수 있습니다. URI의 길이는 일반적인 웹 서버에 제한되어 있으므로 조만간 매우 긴 URI를 가진 요청이 발생하게됩니다. 요청은 트리밍되거나 오류가 발생합니다. POST로 전환하면 URI를 깨끗하게 유지하고 URI 대신 메시지 본문에 데이터를 보관할 수 있습니다. URI 길이 제한에 대한 자세한 내용은 answers to this question을 참조하십시오.
자세한 답변을 주셔서 감사합니다. 문제가있는 문자를 찾아서 제거하려고합니다. 난 JSONP에서 일하고있어 힘든 게시물로 이동할 수 없다 – Amnon
오, 알겠습니다 (JSONP). 나중에 URI를 재구성 할 필요가 없으면 문자를 제거하는 것이 좋습니다. API에서 허용하는 경우 매개 변수를 경로 구성 요소에서 쿼리 문자열로 이동하는 것이 좋습니다. 이렇게하면 URI 길이 제한을 피할 수 있습니다. -/ 질의 문자열 대안으로는 여전히'encodeURIComponent()'가 필요합니다. 자신의 질의 매개 변수를 가진 {location} 값을 사용해야합니다. (현재와 같은 이유로) 요청을 깨뜨릴 수 있습니다. – MicE
쿼리 문자열과 관련하여 팁을 주셔서 감사합니다. 특정 문자로 시작하고 싶지 않았기 때문에 location 매개 변수에 base64를 사용했습니다. – Amnon