복붙노트

[JQUERY] AJAX 크로스 도메인 호출

JQUERY

AJAX 크로스 도메인 호출

해결법


  1. 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. 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. 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. 4.불행하게도 (또는 다행스럽게도) 없습니다. 크로스 도메인 정책은 주위에 쉽게 얻을 있다면 그 다음은 보안을 위해 매우 효율적이지, 이유가있다. JSONP 이외의 유일한 옵션은 프록시에 자신의 서버를 사용하여 페이지입니다.

    불행하게도 (또는 다행스럽게도) 없습니다. 크로스 도메인 정책은 주위에 쉽게 얻을 있다면 그 다음은 보안을 위해 매우 효율적이지, 이유가있다. JSONP 이외의 유일한 옵션은 프록시에 자신의 서버를 사용하여 페이지입니다.

    iframe이 함께, 그들은 동일한 정책이 적용됩니다. 물론 외부 도메인에서 데이터를 표시 할 수 있습니다, 당신은 단지 그것을 조작 할 수 있습니다.


  5. 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. 6.몇 가지 조사를 수행 한 후,이 문제에 대한 유일한 "솔루션"호출하는 것입니다 :

    몇 가지 조사를 수행 한 후,이 문제에 대한 유일한 "솔루션"호출하는 것입니다 :

    if($.browser.mozilla)
       netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
    

    그는 계속 웹 사이트를 허용하는 경우 이것은 사용자를 요청합니다. 그가 그 확인 후 모든 에 관계없이 그것의 데이터 타입의 아약스 호출이 실행 얻을 것이다.

    모질라 브라우저에 대한이 작품은, IE <8에서, 사용자는 크로스 도메인 호출을 허용한다 비슷한 방법으로, 어떤 버전이 필요 브라우저 옵션에서 설정하세요.

    크롬 / 사파리 : 내가 지금까지 그 브라우저의 설정 플래그를 찾지 못했습니다.

    데이터 형식이 될 것입니다 좋은으로 JSONP를 사용하지만, 내 경우에는 내가 모르는 도메인 I의 필요가있는 경우 액세스하는 형식의 데이터를 지원합니다.

    또 다른 샷 aswell 크로스 도메인을 작동 HTML5를 PostMessage를 사용하는 것입니다,하지만 난 할 수 없습니다 HTML5 브라우저 내 사용자 운명 여유.


  7. 7.원격 서버에서 답을 얻을 수있는 PHP 스크립트를 사용하는 경우, 시작 부분에이 줄을 추가합니다 :

    원격 서버에서 답을 얻을 수있는 PHP 스크립트를 사용하는 경우, 시작 부분에이 줄을 추가합니다 :

    header("Access-Control-Allow-Origin: *");
    

  8. 8.JSONP는 제 생각에 가장 좋은 방법입니다. 당신은 수신 된 데이터가 JSON 확인되지 않고 있습니다 - 당신은 구문 오류가 이유를 알아 내려고 시도? 그리고 어쩌면 당신은 어떻게 든 API의 잘못을 사용하고 있습니다.

    JSONP는 제 생각에 가장 좋은 방법입니다. 당신은 수신 된 데이터가 JSON 확인되지 않고 있습니다 - 당신은 구문 오류가 이유를 알아 내려고 시도? 그리고 어쩌면 당신은 어떻게 든 API의 잘못을 사용하고 있습니다.

    당신이 사용할 수 있지만 나는 그것이 귀하의 경우에 적용되는 생각하지 않는다 또 다른 방법은 통화 할 도메인에 SRC 페이지에있는 iFrame을 가지고있다. 당신을 위해 통화를 할 수 있고, 다음 IFRAME과 페이지 사이의 통신에 JS를 사용합니다. 크로스 도메인 우회이 의지 만 통화 할 도메인의 iframe이의 SRC를 할 수 있습니다.


  9. 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&param2=67890';
    document.head.appendChild(script);
    

    이 방법의 유일한 제한은 서버에 보낼 수있는 매개 변수의 최대 길이입니다. 그러나, 당신은 항상 여러 요청을 보낼 수 있습니다.


  10. 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. 11.나는 2 일 동안 같은 문제에 직면하고 나는 해결책을 발견하고는 많은 인터넷 검색 후 우아한입니다. 내 레일 응용 프로그램에 계층의 웹 사이트에서 어떤 풀 데이터 스트림 일부 위젯 고객을 위해 아약스 XSS 필요합니다. 여기에 내가 한 방법입니다.

    나는 2 일 동안 같은 문제에 직면하고 나는 해결책을 발견하고는 많은 인터넷 검색 후 우아한입니다. 내 레일 응용 프로그램에 계층의 웹 사이트에서 어떤 풀 데이터 스트림 일부 위젯 고객을 위해 아약스 XSS 필요합니다. 여기에 내가 한 방법입니다.

  12. from https://stackoverflow.com/questions/2558977/ajax-cross-domain-call by cc-by-sa and MIT license