2010-04-23 5 views
18

는 내가 jQuery를 클라이언트액세스 웹 서비스 - 도메인 간

클라이언트 웹 페이지가 동일한 도메인에있을 때 http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4

모두 잘 작동 특히이 예에서 WCF 서비스를 ACESS하려고 서비스

클라이언트 웹 페이지를 다른 도메인으로 이동하자마자 끊어집니다. 이 서비스에 도달하지 못할와 요청이

이 모든 예, ASMX, REST 및 WCF

어떤 아이디어를 어떻게 작동 크로스 daomain을 취득하는 일이

실패?

답변

10

동일한 출처 정책에 위배됩니다. 액세스중인 웹 서비스는 요청을 작성하는 jQuery 스크립트와 동일한 도메인에 있어야합니다. 이 정책은 모든 브라우저에서 웹 응용 프로그램에 대한 교차 사이트 스크립팅 및 코드 삽입 공격을 방지하기 위해 시행됩니다.

JSONP, 프록시 또는 플래시를 비롯한 여러 가지 방법이 있습니다.

우리는 어떤 기술을 사용해야하는지 제안하기 전에 좀 더 많은 정보가 필요합니다. 나는 JSONP을 선호한다. 그러나 그 사이에, 여기에 몇 가지 빛 독서는 다음과 같습니다

http://taossa.com/index.php/2007/02/08/same-origin-policy/

https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript

여기 JSONP의 사용 예제입니다 :

url = "http://www.test.com/getData.php?callback=parseResults"; 

document.body.appendChild((function() { 
    var newScript = document.createElement("script"); 
    newScript.type = "text/javascript"; 
    newScript.src = url; 
    return newScript; 
})()); 

function parseResults(data) { 
    alert(data); 
} 
+0

동일한 도메인의 서비스로 ajax 호출을하고 요청이 의도 한 서비스로 전달된다는 아이디어가 있습니까? 그러나 브라우저에 의해 부과 된 일종의 제한이없는 서버 측 코드에서 그렇게합니까? – ChrisCa

+3

프록시 사용에 대해 이야기하고 있다면 예, 맞습니다. SOP는 브라우저에 의해 강제되므로 PHP, ASP, ColdFusion 등은 그것에 구애받지 않습니다. JS가 프록시에 요청을하고, 프록시가 서비스에 요청을 한 다음 프록시는 결과를 JS로 다시 전달합니다. – GlenCrawford

+0

프록시를 사용하면 트래픽이 증가하고 대기 시간이 약간 늘어날 수 있음을 지적해야합니다. 이제는 하나 대신 두 가지 요청을하기 때문입니다.JS -> 프록시 -> 서비스 – GlenCrawford

1

당신은 JSONP (JSON with Padding)을 확인 할 수 있습니다. 즉, 웹 서비스 url을 src로 사용하여 페이지에 스크립트 요소를 추가하는 작업이 포함됩니다. 그런 다음 웹 서비스는 스크립트가 구문 분석 될 때 실행되는 콜백 함수의 첫 번째 인수로 JSON을 래핑합니다.

스크립트 요소는, 당신은 할 수 없습니다

+0

을 적용하면 CrossDomain.XML을 추가 할 수 있습니까? 아니면 그렇게 간단하지 않습니까? – ChrisCa

+2

@Christo Fur : 웹 서비스가 상주하는 도메인에 crossdomain.xml 파일을 추가하면 XML 파일에서 Flash 응용 프로그램이있는 도메인을 허용하는 경우 Flash 응용 프로그램이 API에 대한 사이트 간 요청을 할 수 있습니다 (추가 정보 : http://jimbojw.com/wiki/index.php?title=Cross-domain_Ajax_via_Flash) – GlenCrawford

+0

@Christo Fur : + RoseOfJericho가 말한 것. 당신은'Access-Control' 헤더를 들여다 볼 수는 있지만 브라우저 (Fx 일 수도 있음)와 IE8에서는 XMLHttpRequest() 대신 XDomainRequest()를 사용해야합니다. JSONP은 실제로 x-browser 호환성을위한 최상의 옵션입니다. –

0

일반적으로 ..이 문제를 해결받을 수있는 방법 인의 Same Origin Policy 면제; 최신 브라우저는 크로스 사이트 스크립팅 공격을 막기 위해이를 제한합니다. 한 가지 방법은 "패딩 된"JSON 인 JSONP를 사용하는 것입니다. JSONP는 페이지의 스크립트 요소에 결과를 삽입합니다. 그 일을하는 것으로 보이는 Microsoft WCF sample here가 있습니다.

0

2 일 동안 같은 문제에 직면하여 해결책을 찾았습니다. 인터넷 검색을 한 후 우아합니다. 계층 웹 사이트의 데이터 스트림을 내 Rails 앱으로 가져 오는 일부 위젯 클라이언트의 경우 xss Ajax가 필요했습니다. here's how I did.

+0

그건 단지 문제를 해결하는 JSONP 일뿐입니다. DOM 객체로 래핑하지 않아도됩니다. –