2011-01-25 4 views
1

크로스 도메인 문제로 인해 여유 공간이있는 JSONP가 사용되는 나머지 API가 있는데 페이지 및 게시물에서 발생하는 모든 오류를 포착하는 errorlogger를 구현했습니다. 내가 URI에 window.location.href을 통과 할 수있는 방법,나머지 API : REST에 window.location.href 전달 urier

user/{userId}/message/{errorMessage}/browser/{browser}/browserVer/{browserVer}/secure/{secure}/os/{os}/location/{location}" 

위치 변수가 문제가 : 서버 오류 로거의 URI에 그것은 뭔가처럼?

나는 encodeuri, encodeuricomponent 탈출을 시도 해왔다. 감사 URI에 대한 순서를 이스케이프

답변

0

는 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.3path 구성 요소에 대한 예약 문자를 정의 : 그래서

Within a path segment, the characters "/", ";", "=", and "?" are reserved. 

deprecatedencodeURI()이기 때문에 encodeURIComponent()을 사용해야합니다.위의 RFC 발췌문에 따라 이스케이프해야합니다.

아래 예제는 단지 encodeURIComponent() 제대로 슬래시를 탈출한다 (이 가장 가능성이 당신이 직면하고있는 문제의 원인이 문자입니다) 보여줍니다

: 그러나 유의하시기 바랍니다

>>> escape('//'); 
"//" 

>>> encodeURI('//'); 
"//" 

>>> encodeURIComponent('//'); 
"%2F%2F" 

가 가능하다면, 당신은해야 사용 GET 대신 POST. 이는 서버 (GET)에서 데이터를 가져 오는 대신 클라이언트에서 서버 (POST)로 데이터를 전송할 때 REST (및 일반적으로)에서 사용하는 올바른 방법입니다.

POST를 사용하면 추가 문제를 피할 수 있습니다. URI의 길이는 일반적인 웹 서버에 제한되어 있으므로 조만간 매우 긴 URI를 가진 요청이 발생하게됩니다. 요청은 트리밍되거나 오류가 발생합니다. POST로 전환하면 URI를 깨끗하게 유지하고 URI 대신 메시지 본문에 데이터를 보관할 수 있습니다. URI 길이 제한에 대한 자세한 내용은 answers to this question을 참조하십시오.

+0

자세한 답변을 주셔서 감사합니다. 문제가있는 문자를 찾아서 제거하려고합니다. 난 JSONP에서 일하고있어 힘든 게시물로 이동할 수 없다 – Amnon

+0

오, 알겠습니다 (JSONP). 나중에 URI를 재구성 할 필요가 없으면 문자를 제거하는 것이 좋습니다. API에서 허용하는 경우 매개 변수를 경로 구성 요소에서 쿼리 문자열로 이동하는 것이 좋습니다. 이렇게하면 URI 길이 제한을 피할 수 있습니다. -/ 질의 문자열 대안으로는 여전히'encodeURIComponent()'가 필요합니다. 자신의 질의 매개 변수를 가진 {location} 값을 사용해야합니다. (현재와 같은 이유로) 요청을 깨뜨릴 수 있습니다. – MicE

+0

쿼리 문자열과 관련하여 팁을 주셔서 감사합니다. 특정 문자로 시작하고 싶지 않았기 때문에 location 매개 변수에 base64를 사용했습니다. – Amnon

관련 문제