[JQUERY] AJAX 크로스 도메인 호출
JQUERYAJAX 크로스 도메인 호출
해결법
-
1.유일한 (쉬운) 방법은 AJAX 앤디 E가 언급 한 바와 같이 프록시와 같은 서버 측 언어를 사용하는 사용하는 도메인 간 데이터를 얻을 수 있습니다. 다음은 그 사용하여 jQuery를 구현하는 방법 작은 샘플입니다 :
유일한 (쉬운) 방법은 AJAX 앤디 E가 언급 한 바와 같이 프록시와 같은 서버 측 언어를 사용하는 사용하는 도메인 간 데이터를 얻을 수 있습니다. 다음은 그 사용하여 jQuery를 구현하는 방법 작은 샘플입니다 :
JQuery와 부분 :
$.ajax({ url: 'proxy.php', type: 'POST', data: { address: 'http://www.google.com' }, success: function(response) { // response now contains full HTML of google.com } });
그리고 PHP (proxy.php) :
echo file_get_contents($_POST['address']);
그렇게 단순. 그냥 당신이 나 긁어 데이터로 할 수있는 것과 할 수없는 것을 알고.
-
2.당신은 페이지가 참조하는 데이터로 동적으로 삽입 스크립트 태그에 필요합니다. 스크립트가로드되면 JSONP를 사용하면 일부 콜백 함수를 실행할 수 있습니다.
당신은 페이지가 참조하는 데이터로 동적으로 삽입 스크립트 태그에 필요합니다. 스크립트가로드되면 JSONP를 사용하면 일부 콜백 함수를 실행할 수 있습니다.
JSONP에 위키 피 디아 페이지는 간결한 예제를 가지고; 스크립트 태그 :
<script type="text/javascript" src="http://domain1.com/getjson?jsonp=parseResponse"> </script>
parseResponse의 호출에 싸여 JSON 데이터를 반환합니다 :
parseResponse({"Name": "Cheeso", "Rank": 7})
(domain1.com에해서 getJSON 스크립트의 구성에 따라)
태그 동적으로 삽입하는 코드는 다음과 같을 것이다
var s = document.createElement("script"); s.src = "http://domain1.com/getjson?jsonp=parseResponse"; s.type = "text/javascript"; document.appendChild(s);
-
3.당신은 당신의 자신의 프록시를 호스팅 할 필요없이 요청을 할 YQL을 사용할 수 있습니다. 나는 명령을 실행하기 쉽게하기 위해 간단한 함수를 만들었습니다 :
당신은 당신의 자신의 프록시를 호스팅 할 필요없이 요청을 할 YQL을 사용할 수 있습니다. 나는 명령을 실행하기 쉽게하기 위해 간단한 함수를 만들었습니다 :
function RunYQL(command, callback){ callback_name = "__YQL_callback_"+(new Date()).getTime(); window[callback_name] = callback; a = document.createElement('script'); a.src = "http://query.yahooapis.com/v1/public/yql?q=" +escape(command)+"&format=json&callback="+callback_name; a.type = "text/javascript"; document.getElementsByTagName("head")[0].appendChild(a); }
당신이 jQuery를하는 경우, 당신은 대신에 $ .getJSON을 사용할 수 있습니다.
샘플이 될 수 있습니다 :
RunYQL('select * from html where url="http://www.google.com/"', function(data){/* actions */} );
-
4.불행하게도 (또는 다행스럽게도) 없습니다. 크로스 도메인 정책은 주위에 쉽게 얻을 있다면 그 다음은 보안을 위해 매우 효율적이지, 이유가있다. JSONP 이외의 유일한 옵션은 프록시에 자신의 서버를 사용하여 페이지입니다.
불행하게도 (또는 다행스럽게도) 없습니다. 크로스 도메인 정책은 주위에 쉽게 얻을 있다면 그 다음은 보안을 위해 매우 효율적이지, 이유가있다. JSONP 이외의 유일한 옵션은 프록시에 자신의 서버를 사용하여 페이지입니다.
iframe이 함께, 그들은 동일한 정책이 적용됩니다. 물론 외부 도메인에서 데이터를 표시 할 수 있습니다, 당신은 단지 그것을 조작 할 수 있습니다.
-
5.나는 크로스 도메인 아약스 호출이 코드를 사용, 나는 여기보다 더 많은 도움이되기를 바랍니다. 나는 프로토 타입 라이브러리를 사용하고 있는데 당신은 JQuery와 또는 도장 또는 다른 어떤과 동일 할 수 있습니다 :
나는 크로스 도메인 아약스 호출이 코드를 사용, 나는 여기보다 더 많은 도움이되기를 바랍니다. 나는 프로토 타입 라이브러리를 사용하고 있는데 당신은 JQuery와 또는 도장 또는 다른 어떤과 동일 할 수 있습니다 :
1 단계 : 새로운 JS 파일을 만들고이 클래스의 내부를 넣어, 나는 그것이 xss_ajax.js라고
var WSAjax = Class.create ({ initialize: function (_url, _callback){ this.url = _url ; this.callback = _callback ; this.connect () ; }, connect: function (){ var script_id = null; var script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.setAttribute('src', this.url); script.setAttribute('id', 'xss_ajax_script'); script_id = document.getElementById('xss_ajax_script'); if(script_id){ document.getElementsByTagName('head')[0].removeChild(script_id); } // Insert <script> into DOM document.getElementsByTagName('head')[0].appendChild(script); }, process: function (data){ this.callback(data) ; } }) ;
이 클래스는 SRC이 형식의 데이터를 제공해야합니다 원격 서버로 실제로 목표 당신의 JSON 데이터 공급자 (JSON-P 속성 동적 스크립트 요소를 생성 :: call_back_function (// json_data_here) : 그래서 스크립트 태그를 생성 할 때 JSON 직접 (우리는 2 단계에서 서버에 콜백 메소드 이름을 전달 얘기하자) 함수로 evaled되며,이 뒤에 주요 개념은 IMG 요소 등 해당 스크립트가 SOP 제약 우려하지 않는 것입니다.
2 단계 : 당신은 비동기 적으로 JSON을 끌어 싶어 모든 HTML 페이지에 (우리는이 AJAJ ~ 비동기 자바 스크립트 + JSON 전화 :-) 대신 XHTTPRequest 개체를 사용하여 AJAX의) 아래와 같이 할
//load Prototype first //load the file you've created in step1 var xss_crawler = new WSAjax ( "http://your_json_data_provider_url?callback=xss_crawler.process" , function (_data){ // your json data is _data and do whatever you like with it }) ;
D' 당신은 1 단계에서 콜백을 remenber? 우리는 서버에 전달하고는 JSON 그 방법에 임베디드 반환 그래서 우리의 경우 서버가 evalable 자바 스크립트 코드 xss_crawler.process (// the_json_data)을 반환합니다 않도록, 그 xss_crawler이 WSAjax 클래스의 인스턴스입니다 기억하십시오. 서버 코드는 (그것의 당신 경우)에 따라 달라 지지만 아약스 데이터 공급자의 대부분은 우리가 그랬던 것처럼 당신이 매개 변수에 콜백 방법을 지정할 수 있습니다. 루비 레일에 난 그냥했다
render :json=>MyModel.all(:limit=>10), :callback => params[:callback],:content_type => "application/json"
모든있어 그, 이제 잊지 않습니다 만 JSON 형식으로, (, 등 매핑 위젯)하면 앱에서 다른 도메인에서 데이터를 가져올 수 있습니다.
나는 그것이 helpfull을했다 희망, 감사 양해 :-), 평화와 코드가 서식 죄송합니다, 그것은 잘 작동하지 않습니다
-
6.몇 가지 조사를 수행 한 후,이 문제에 대한 유일한 "솔루션"호출하는 것입니다 :
몇 가지 조사를 수행 한 후,이 문제에 대한 유일한 "솔루션"호출하는 것입니다 :
if($.browser.mozilla) netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
그는 계속 웹 사이트를 허용하는 경우 이것은 사용자를 요청합니다. 그가 그 확인 후 모든 에 관계없이 그것의 데이터 타입의 아약스 호출이 실행 얻을 것이다.
모질라 브라우저에 대한이 작품은, IE <8에서, 사용자는 크로스 도메인 호출을 허용한다 비슷한 방법으로, 어떤 버전이 필요 브라우저 옵션에서 설정하세요.
크롬 / 사파리 : 내가 지금까지 그 브라우저의 설정 플래그를 찾지 못했습니다.
데이터 형식이 될 것입니다 좋은으로 JSONP를 사용하지만, 내 경우에는 내가 모르는 도메인 I의 필요가있는 경우 액세스하는 형식의 데이터를 지원합니다.
또 다른 샷 aswell 크로스 도메인을 작동 HTML5를 PostMessage를 사용하는 것입니다,하지만 난 할 수 없습니다 HTML5 브라우저 내 사용자 운명 여유.
-
7.원격 서버에서 답을 얻을 수있는 PHP 스크립트를 사용하는 경우, 시작 부분에이 줄을 추가합니다 :
원격 서버에서 답을 얻을 수있는 PHP 스크립트를 사용하는 경우, 시작 부분에이 줄을 추가합니다 :
header("Access-Control-Allow-Origin: *");
-
8.JSONP는 제 생각에 가장 좋은 방법입니다. 당신은 수신 된 데이터가 JSON 확인되지 않고 있습니다 - 당신은 구문 오류가 이유를 알아 내려고 시도? 그리고 어쩌면 당신은 어떻게 든 API의 잘못을 사용하고 있습니다.
JSONP는 제 생각에 가장 좋은 방법입니다. 당신은 수신 된 데이터가 JSON 확인되지 않고 있습니다 - 당신은 구문 오류가 이유를 알아 내려고 시도? 그리고 어쩌면 당신은 어떻게 든 API의 잘못을 사용하고 있습니다.
당신이 사용할 수 있지만 나는 그것이 귀하의 경우에 적용되는 생각하지 않는다 또 다른 방법은 통화 할 도메인에 SRC 페이지에있는 iFrame을 가지고있다. 당신을 위해 통화를 할 수 있고, 다음 IFRAME과 페이지 사이의 통신에 JS를 사용합니다. 크로스 도메인 우회이 의지 만 통화 할 도메인의 iframe이의 SRC를 할 수 있습니다.
-
9.여기 당신이 그것을 할 수있는 방법 쉬운 방법은 아무것도 공상, 또는 JSON을 사용하지 않고있다.
여기 당신이 그것을 할 수있는 방법 쉬운 방법은 아무것도 공상, 또는 JSON을 사용하지 않고있다.
첫째, 귀하의 요청을 처리하는 서버 측 스크립트를 만들 수 있습니다. http://www.example.com/path/handler.php 같은 뭔가
당신은 다음과 같이 매개 변수를 호출합니다 : ... / handler.php PARAM1 = 12345 & PARAM2 = 67890
그 안에서, 수신 된 데이터를 처리 한 후, 출력 :
document.serverResponse('..all the data, in any format that suits you..'); // Any code could be used instead, because you dont have to encode this data // All your output will simply be executed as normal javascript
이제 클라이언트 측 스크립트에서, 다음을 사용 :
document.serverResponse = function(param){ console.log(param) } var script = document.createElement('script'); script.src='http://www.example.com/path/handler.php?param1=12345¶m2=67890'; document.head.appendChild(script);
이 방법의 유일한 제한은 서버에 보낼 수있는 매개 변수의 최대 길이입니다. 그러나, 당신은 항상 여러 요청을 보낼 수 있습니다.
-
10.당신은 (자바 스크립트가 실행되는 서버와 외부 API 서버) 두 서버를 구성하는 기술 CORS를 사용할 수 있습니다
당신은 (자바 스크립트가 실행되는 서버와 외부 API 서버) 두 서버를 구성하는 기술 CORS를 사용할 수 있습니다
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
p.s : 대답 https://stackoverflow.com/a/37384641/6505594 또한이 방법을 제안하고, 그것을 전화를 다른 사람에게 외부 API 서버를 여는.
-
11.나는 2 일 동안 같은 문제에 직면하고 나는 해결책을 발견하고는 많은 인터넷 검색 후 우아한입니다. 내 레일 응용 프로그램에 계층의 웹 사이트에서 어떤 풀 데이터 스트림 일부 위젯 고객을 위해 아약스 XSS 필요합니다. 여기에 내가 한 방법입니다.
나는 2 일 동안 같은 문제에 직면하고 나는 해결책을 발견하고는 많은 인터넷 검색 후 우아한입니다. 내 레일 응용 프로그램에 계층의 웹 사이트에서 어떤 풀 데이터 스트림 일부 위젯 고객을 위해 아약스 XSS 필요합니다. 여기에 내가 한 방법입니다.
from https://stackoverflow.com/questions/2558977/ajax-cross-domain-call by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 어떻게 JS 또는 jQuery로 아약스 요청에 사용자 지정 HTTP 헤더를 추가 할 수 있습니까? (0) | 2020.09.27 |
---|---|
[JQUERY] 변수가 '정의되지 않은'또는 '널 (null)'의 경우 어떻게 확인할 수 있습니까? (0) | 2020.09.27 |
[JQUERY] 쇼 달 년 만에 jQuery를 UI DatePicker에서 (0) | 2020.09.27 |
[JQUERY] 드롭 다운 메뉴에서 옵션을 선택하기 JQuery와 (0) | 2020.09.27 |
[JQUERY] CSS의 액세스 "후"선택 jQuery를 함께 [중복] (0) | 2020.09.27 |