2011-05-06 3 views
7

일부 REST API에 대한 커넥터가 될 jQuery 플러그인을 개발 중입니다. 구현은 간단하지만 동일한 출처 정책은 분명히 고통 스럽습니다. 주로 POST 요청을 수행해야합니다.jQuery 및 크로스 도메인 POST 요청

는 또한 ... 어떤 생각을 OPTIONS 메소드를 구현하기 위해 노력하고 반환입니다 (파이썬,하지만 의미는 명확해야한다)

def options(self): 
    self.response.headers['Access-Control-Allow-Origin'] = self.request.host_url 
    self.response.headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS' 
    self.response.headers['Access-Control-Allow-Headers'] = 'x-requested-with' 
    self.response.headers['Access-Control-Max-Age'] = '1728000' 

여전히 작동하지 않는 이유는 무엇입니까?

PS : 나는 유사한 주제와 다른 문제가 있음을 보았다하지만 난 POST 방법에 대한 특정 솔루션 (easely 사용 iframe을에 의해 구현 될 수 GET)

자바 스크립트 예제가 필요합니다

$.ajax({ 
    url: options.protocol+'://'+options.host+':'+options.port+'/'+method, 
    data: rawData, 
    async:false, 
    dataType: "json", 
    type:"POST", 
    success:function(data) 
    { 
     alert('asd'); 
     result.data = data; 
     alert(data); 
    }, 
    error:function(lol){ 
     alert('omggg !!!!'+lol); 
    } 

}); 

편집 : 추가 된 자바 스크립트 코드 예제

그것은 때로는 바이올린의 약간의
+0

지원해야하는 브라우저에서 크로스 도메인 헤더가 지원됩니까? –

+0

'Access-Control-Allow-Origin' 만 시도하고'*'로 설정 했습니까? 그것은 항상 나를 위해 일해 왔습니다. – mekwall

+0

글쎄, 난 그 헤더의 역할을 설명하는 기사를 발견. 테스트를 위해 나는 파이어 폭스를 사용하고 있었고 acutally 나는 리턴 바디 (thx httpfox)를 가지고 있지만 성공 메소드 (jQuery.ajax)를 얻을 수 없다. – Cesar

답변

9

, 몇 가지 생각 :

  • CORS는 최신 브라우저에서만 지원되므로 그 중 하나를 사용하고 있는지 확인해야합니다.
  • IE 만 XDomainRequest 객체가 아닌 표준 XMLHttpRequest 객체를 통해 CORS를 지원하지만, jQuery를 구체적으로 그 음식을 장만하지 않습니다 (아직, 나는 약간 놀랐어요 인정해야하고 를 그 전에 너무 오래 기대) 그래서 IE (그리고 IE8 이상)에서이 작업을하기 위해 특수 처리를 추가해야합니다. 편집는 : 놀랍게도, 분명히 jQuery를 팀은 해당 요청이 있고 에게 그것을 거부 : 없는 의미가 ticket #8283을.
  • Access-Control-Allow-Origin 값에 대해 확실합니까? 은 서버가 액세스하는 것만 허용하는 것처럼 보이는입니다. 이 헤더는 서버가 에 대한 요청을 허용 할 기원을 지정하기 위해의 출처를 지정하기위한 것입니다. (그리고 *은 "어디서나."를 의미합니다.)
  • Firefox에서 실험 한 내용에서 묻지 않은 OPTIONS 요청에 응답 할 때 허용하는 방법에 대해 까다롭기 만합니다.
  • 모두 요청을 보내는 헤더의을 허용하는지 다시 확인하십시오. 예를 들어 하나의 헤더 (x-requested-with) 만 허용하는 것처럼 보이지만 실제 요청에 다른 헤더가있을 것입니다.

FWIW (나는 파이썬 사람이 아니에요), 여기에 아마도   — 내가 개체 이름이 자바를하지 않아도 읽을 수있을 정도로 명확하다 생각 도움이 될 것입니다 작품 내 JSP 코드입니다 (누가, 아마 당신이 알고) :

String corsOrigin, corsMethod, corsHeaders; 

// Find out what the request is asking for 
corsOrigin = request.getHeader("Origin"); 
corsMethod = request.getHeader("Access-Control-Request-Method"); 
corsHeaders = request.getHeader("Access-Control-Request-Headers"); 
if (corsOrigin == null || corsOrigin.equals("null")) { 
    // Requests from a `file://` path seem to come through without an 
    // origin or with "null" (literally) as the origin. 
    // In my case, for testing, I wanted to allow those and so I output 
    // "*", but you may want to go another way. 
    corsOrigin = "*"; 
} 

// Add headers allowing specifically what was requested 
response.addHeader("Access-Control-Allow-Origin", corsOrigin); 
response.addHeader("Access-Control-Allow-Methods", corsMethod); 
response.addHeader("Access-Control-Allow-Headers", corsHeaders); 
if (request.getMethod().equals("OPTIONS")) 
{ 
    // Done, no body in response to OPTIONS 
    return; 
} 
// Processing the GET or POST here; output the body of the response 

내가 GET에 대해 정확히 POST을 같은 논리를 사용하고 주 및 옵션의 경우에서 제외 OPTIONS, 나는 출력하지 응답 본문을 .

+0

꽤 좋은, 고마워. :) – Cesar

+2

@Cesar : 아, 좋아! 도움이 된 것을 기쁘게 생각합니다. –