2011-11-30 3 views
2

다른 도메인/서버에있는 데이터를 요청하려고하는데 요청을 보내려고 할 때 예외가 발생합니다.다른 도메인/서버의 콘텐츠를 요청하십시오.

var request = new XMLHttpRequest(); 
request.open("GET", "http://www.w3schools.com/ajax/cd_catalog.xml", false); 
request.send(); 

오류 :

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE)" nsresult: "0x80004005 (NS_ERROR_FAILURE)"]

이 동일한 도메인/서버에없는 콘텐츠를 요청하는 올바른 방법인가? 아니면 이것을 수행 할 다른 방법이 있습니까?

나는 이것을 Firefox 8.0에서 테스트하고 있지만, 모든 주요 현대의 브라우저에서 작동 할 수있는 솔루션을 원합니다.

답변

2

다른 도메인의 콘텐츠를 직접 검색 할 수 없습니다. 당신은 당신을 위해 일하는 서버 (프록시)를 통해 또는 JSONP와 같은 것을 사용하여 컨텐트를 검색 할 수 있습니다. 이 wikipedia page을 확인하십시오.

주제에 대한 추가 정보는 this page

1

의 크로스 도메인 요청 흥미로운 일이 될 수 있습니다, 그것은 항상 서버에 프록시를 사용하여 수행. 당신은 서버 요청을 생성하고 자바 스크립트

var request = new XMLHttpRequest(); 
request.open("GET", "abc.aspx"); 
request.send(); 
2

이라고 도메인 간 아약스 대부분의 브라우저는이 보안 위반 고려하여 자신의 abc.aspx을 abc.apsx 같은 해당 페이지에 http://www.w3schools.com/ajax/cd_catalog.xml를 호출하고 호출합니다. 한 가지 해결 방법은 다른 서버 (귀하의 경우 /www.w3schools.com)에서 데이터를 요청하고 다시 Ajax 요청에 에코하는 서버 측 구성 요소 (보고있는 페이지와 동일한 도메인)를 작성하는 것입니다.

이 링크 문제와 몇 가지 솔루션 설명합니다 : 보안상의 이유로

http://jimbojw.com/wiki/index.php?title=Introduction_to_Cross-Domain_Ajaxrequest

http://usejquery.com/posts/the-jquery-cross-domain-ajax-guide

3

를,이 같은 요청이 작동하지 않습니다. 도메인이 다른 도메인의 데이터에 액세스 할 수 있다고 상상해보십시오 (예 : www.sketchyattacksite.com) 다른 사이트 (예 : www.bankofamerica.com)에서 임의의 콘텐츠를 가져올 수있는 사이트 (예 : www.sketchyattacksite.com)가 인증 된 사용자의 데이터 기밀 세션 정보. 모든 최신 브라우저에서 구현되는 same origin policy은 그러한 보안 위반이 발생하지 않도록하기 위해 존재합니다.

는 같은 기원 정책 주위에 얻을 수있는 몇 가지 일반적인 방법이 있습니다 :

  1. 는 외부 인 것처럼 당신이 그것을로드 할 수 있습니다 (JSONP로 상기 데이터를 반환 할 수로부터 데이터를 요청하는 도메인 스크립트, 동일한 출처 정책의 적용을받지 않음). 사이트는 종종 API에 JSONP 형식을 제공합니다. 예를 들어 다음과 같습니다. https://graph.facebook.com/cocacola?callback=name_of_function_to_pass_data_via_jsonp
  2. Cross-Origin Resource Sharing (CORS)은 최신 표준이므로 최신 브라우저에서만 작동하지만 사이트에서 (HTTP 헤더를 통해) 어떤 도메인에 액세스 할 수 있는지 허용합니다 데이터. 예를 들어 뱅크 오브 아메리카가 www.sketchyattacksite.com이 www.bankofamerica.com에 요청할 수 있도록 허용하려는 경우 Access-Control-Allow-Origin: sketchyattacksite.com 헤더를 반환 할 수 있습니다.
  3. 서버 측 프록시. 서버에서 처리기를 만들 수 있습니다.이 처리기의 유일한 기능은 대상 http://www.w3schools.com/ajax/cd_catalog.xml 파일을 검색하여 도메인에서 반환하는 것입니다.이는 사용자의 브라우저가 요청하는 대신 w3schools.com에서 사용자의 쿠키에 액세스 할 수없는 서버가 수행하기 때문에 잠재적으로 전달되는 기밀 데이터의 문제를 해결합니다.

이 특별한 경우 서버 측 프록시 인 # 3처럼 보입니다. 왜? 데이터를 요청한 사이트를 제어 할 권한이 없으므로 (w3schools.com 자체에서 구현하지 않는 한 # 1 또는 # 2를 사용할 수 없음을 의미).

야후! 호의 simple PHP example of a serverside proxy입니다. 핵심은 특정 도메인의 콘텐츠 만 가져 오도록 잠겨 있습니다 (나쁜 행위자가 귀하를 대신하여 생성 된 것으로 보이는 임의의 요청에이를 사용할 수 없도록 함). 이는 다음을 통해 대상 URL을 요청하는 것처럼 간단합니다. 컬 (curl)하고 그것을 사용자에게 리턴한다. 서버 측 프록시의 모든로드가 http://www.w3schools.com/ajax/cd_catalog.xml 파일에 대한 새 요청을 트리거하지 못하도록 캐싱을 추가 할 수도 있습니다.

관련 문제