JavaScript를 통해 도메인 간 POST 요청을 보내려면 어떻게합니까?


568

JavaScript를 통해 도메인 간 POST 요청을 보내려면 어떻게합니까?

참고-페이지를 새로 고치면 안되며 나중에 응답을 잡고 구문 분석해야합니다.


이 작업을 수행 할 수있는 사용 사례에 대해 조금 알고 싶습니다. 그것에 대해 말씀해 주시겠습니까?
mkoeller

기본적으로 처리를 위해 HTML 파일에서 다른 서버로 텍스트를 보내야하는 스크립트를 작성 중입니다.
Ido Schacham

3
서버 측에서이를 수행하고 스크립트 결과를 제공하는 프록시를 설정할 수 있습니까? 아니면 100 % JavaScript 여야합니까?
Sasha Chedygov

답변:


382

업데이트 : 계속하기 전에 모든 사람이 CORS에 대한 html5rocks 튜토리얼 을 읽고 이해해야합니다 . 이해하기 쉽고 매우 명확합니다.

POST중인 서버를 제어하는 ​​경우 서버에서 응답 헤더를 설정하여 "Cross-Origin Resource Sharing 표준"을 활용하십시오. 이 답변은이 스레드의 다른 답변에서 논의되지만 내 의견으로는 명확하지 않습니다.

간단히 말해서 from.com/1.html에서 to.com/postHere.php (예를 들어 PHP를 사용하여)로 교차 도메인 POST를 수행하는 방법이 있습니다. 참고 : Access-Control-Allow-OriginNON OPTIONS요청에 대해서만 설정하면됩니다. 이 예에서는 항상 더 작은 코드 스 니펫에 대해 모든 헤더를 설정합니다.

  1. postHere.php 설정에서 다음을 수행하십시오.

    switch ($_SERVER['HTTP_ORIGIN']) {
        case 'http://from.com': case 'https://from.com':
        header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
        header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
        header('Access-Control-Max-Age: 1000');
        header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
        break;
    }

    이를 통해 스크립트가 도메인 간 POST, GET 및 OPTIONS를 만들 수 있습니다. 계속 읽으면서 이것은 분명해질 것입니다 ...

  2. JS에서 교차 도메인 POST를 설정하십시오 (jQuery 예).

    $.ajax({
        type: 'POST',
        url: 'https://to.com/postHere.php',
        crossDomain: true,
        data: '{"some":"json"}',
        dataType: 'json',
        success: function(responseData, textStatus, jqXHR) {
            var value = responseData.someKey;
        },
        error: function (responseData, textStatus, errorThrown) {
            alert('POST failed.');
        }
    });

2 단계에서 POST를 수행하면 브라우저는 서버에 "OPTIONS"메소드를 보냅니다. 이것은 서버에서 POST하는 동안 서버가 멋진 지 확인하기 위해 브라우저에서 "스 니프"입니다. 요청이 " http://from.com "또는 " https://from.com " 에서 시작된 경우 서버는 "Access-Control-Allow-Origin"으로 응답하여 브라우저에게 POST | GET | ORIGIN에 OK를 알려줍니다 . 서버에 문제가 없으므로 브라우저는 두 번째 요청을합니다 (이번에는 POST). 클라이언트가 전송하는 컨텐츠 유형을 설정하도록하는 것이 좋습니다. 따라서이를 허용해야합니다.

MDN은 전체 흐름이 어떻게 작동하는지 자세히 설명하는 HTTP 액세스 제어 에 대한 훌륭한 글을 작성했습니다 . 문서에 따르면 "사이트 간 XMLHttpRequest를 지원하는 브라우저에서 작동"해야합니다. 그러나 현대 브라우저 만 도메인 간 POST를 허용 한다고 생각하기 때문에 약간 오해의 소지가 있습니다. 나는 이것이 사파리, 크롬, FF 3.6에서만 작동하는지 확인했습니다.

이렇게하면 다음을 명심하십시오.

  1. 서버는 작업 당 2 개의 요청을 처리해야합니다.
  2. 보안 관련 사항에 대해 생각해야합니다. 'Access-Control-Allow-Origin : *'과 같은 작업을 수행하기 전에주의하십시오.
  3. 모바일 브라우저에서는 작동하지 않습니다. 내 경험상 그들은 도메인 간 POST를 전혀 허용하지 않습니다. 나는 안드로이드, 아이 패드, 아이폰을 테스트했다
  4. FF <3.6에는 서버가 400이 아닌 응답 코드를 반환하고 응답 본문 (예 : 유효성 검사 오류)이있는 경우 FF 3.6은 응답 본문을 얻지 못하는 꽤 큰 버그가 있습니다. 좋은 REST 사례를 사용할 수 없기 때문에 이것은 엉덩이에 큰 고통입니다. 여기에 버그를 참조 하십시오 (jQuery에 제출되었지만 FF 버그라고 생각합니다-FF4에서 수정 된 것으로 보입니다).
  5. OPTION 요청뿐만 아니라 항상 위의 헤더를 반환하십시오. FF는 POST의 응답으로 필요합니다.

예를 들어 html을 반환 할 수 있습니까? 나는 HTML을 반환해야하고 뭔가가 작동하지 않습니다 ...
denis_n

그렇습니다 당신은 할 수 있어야합니다. 그것을 시도하지 마십시오. 서버가 200을 반환합니까? 또한 서버가 옵션 및 POST 요청에 대한 헤더를 반환합니까? 이에 대한 자세한 내용으로 답변을 업데이트했습니다. 서버가 올바른 컨텐츠 유형 헤더 (예 : text / html)로 응답하는지 확인하십시오. 내 추천은 google chrome을 사용하고 page> inspect 요소를 마우스 오른쪽 버튼으로 클릭하는 것입니다. 네트워크 탭을 클릭하고 POST와 응답을보십시오. 무엇이 잘못되었는지에 대한 정보를 제공해야합니다.
rynop

나는이 시도,하지만 여전히 얻을 수 있습니다 400 Bad RequestOPTIONS요청. 그리고 firefox두 번째 요청에서 POST결코 이루어지지 않습니다. :(
Zain Shaikh

위의 사례 선언에서 로컬 컴퓨터를 호출하는 방법이 있습니까? 또는이 경우 허용 오리진에 *를 사용해야합니까?
토드 밴스

1
이것은 4 년 전에 마지막으로 편집되었습니다. 이제 모바일 브라우저에서도 작동합니까?
frankpinto

121

원격 서버를 제어하는 경우이 답변에 설명 된대로 CORS를 사용해야합니다 . IE8 이상 및 모든 최신 버전의 FF, GC 및 Safari에서 지원됩니다. 그러나 IE8 및 9에서는 CORS에서 요청에 쿠키를 보낼 수 없습니다.

따라서 원격 서버를 제어 하지 않거나 IE7을 지원해야하거나 쿠키가 필요하고 IE8 / 9를 지원해야하는 경우 iframe 기술을 사용하고 싶을 것입니다.

  1. 고유 한 이름으로 iframe을 만듭니다. (iframe은 전체 브라우저에 전역 네임 스페이스를 사용하므로 다른 웹 사이트에서 사용하지 않는 이름을 선택하십시오.)
  2. 숨겨진 입력으로 iframe을 대상으로 양식을 구성하십시오.
  3. 양식을 제출하십시오.

샘플 코드는 다음과 같습니다. IE6, IE7, IE8, IE9, FF4, GC11, S5에서 테스트했습니다.

function crossDomainPost() {
  // Add the iframe with a unique name
  var iframe = document.createElement("iframe");
  var uniqueString = "CHANGE_THIS_TO_SOME_UNIQUE_STRING";
  document.body.appendChild(iframe);
  iframe.style.display = "none";
  iframe.contentWindow.name = uniqueString;

  // construct a form with hidden inputs, targeting the iframe
  var form = document.createElement("form");
  form.target = uniqueString;
  form.action = "http://INSERT_YOUR_URL_HERE";
  form.method = "POST";

  // repeat for each parameter
  var input = document.createElement("input");
  input.type = "hidden";
  input.name = "INSERT_YOUR_PARAMETER_NAME_HERE";
  input.value = "INSERT_YOUR_PARAMETER_VALUE_HERE";
  form.appendChild(input);

  document.body.appendChild(form);
  form.submit();
}

조심해! iframe이 별도의 도메인에 있기 때문에 POST의 응답을 직접 읽을 수 없습니다. 프레임은 서로 다른 도메인에서 서로 통신 할 수 없습니다. 이것은 동일한 출처 정책 입니다.

원격 서버를 제어하지만 CORS를 사용할 수없는 경우 (예 : IE8 / IE9를 사용 중이고 쿠키를 사용해야 함), 동일한 출처 정책을 해결하는 방법 (예 : window.postMessage및 / 또는) 이전 브라우저에서 도메인 간 크로스 프레임 메시지를 보낼 수있는 여러 라이브러리 중 하나 :

원격 서버를 제어하지 않으면 POST 기간의 응답을 읽을 수 없습니다. 그렇지 않으면 보안 문제가 발생할 수 있습니다.


2
form.target을 무언가로 설정해야합니다. 그렇지 않으면 브라우저가 사이트에서 양식 작업 URL로 이동합니다. 또한 문자열은 고유해야합니다. 동일한 이름을 사용하는 다른 프레임이나 창이있는 경우 양식이 iframe 대신 해당 창에 게시 될 수 있습니다. 그러나 얼마나 독창적이어야합니까? 아마별로. clobbering의 가능성은 매우 작습니다. 어깨를 으
Dan Fabulich

1
@ Nawaz 내 대답에서 말했듯이 웹 페이지에서 결과를 얻으려면 도메인 간 크로스 프레임 통신을 수행해야합니다. 웹 페이지와의 통신을 허용하도록 응답을 수정할 수 있도록 원격 웹 서버를 제어해야합니다. (한 가지 들어, 서버가 HTML로 응답해야합니다, 서버가 원시 XML로 응답하는 경우, 그것은 프레임 간 통신을 할 수 없습니다.)
댄 Fabulich

1
+1-이것이 서버에 액세스 할 수없는 경우에 내가 찾은 최고의 솔루션입니다
James Long

1
@VojtechB 아니요, 보안 허점이 될 것입니다.
Dan Fabulich

1
@Andrus POST 결과를 읽을 수 있지만 서버를 제어하는 ​​경우에만 가능합니다! 그 답에서 "발신자 [클라이언트]에 X를, 수신자 [서버]에 Y를"라고 말합니다. 수신자 / 서버를 제어하지 않으면 Y를 수행 할 수 없으므로 POST 결과를 읽을 수 없습니다.
Dan Fabulich

48
  1. iFrame을 만들고
  2. 숨겨진 입력으로 양식을 넣습니다.
  3. 양식의 동작을 URL로 설정하고
  4. 문서에 iframe 추가
  5. 양식을 제출하십시오

의사 코드

 var ifr = document.createElement('iframe');
 var frm = document.createElement('form');
 frm.setAttribute("action", "yoururl");
 frm.setAttribute("method", "post");

 // create hidden inputs, add them
 // not shown, but similar (create, setAttribute, appendChild)

 ifr.appendChild(frm);
 document.body.appendChild(ifr);
 frm.submit();

숨겨져 있고 절대적으로 배치되도록 iframe 스타일을 지정하고 싶을 것입니다. 브라우저에서 교차 사이트 게시가 허용되는지 확실하지 않지만 그렇게하는 경우이를 수행하는 방법입니다.


4
ifr.appendChild (frm); 때문에 실제로는 약간 부정확합니다. 작동 안 할 것이다. iframe은 윈도우 객체에 대한 참조이며 appendChild 메소드가 존재하지 않습니다. 먼저 iframe에서 문서 노드를 가져와야합니다. 브라우저에서 작동하려면 기능 감지가 필요합니다.
Rakesh Pai

감사. 이 문제에 대한 이러한 유용한 링크를 찾았습니다 bindzus.wordpress.com/2007/12/24/... developer.apple.com/internet/webcontent/iframe.html
이도 Schacham

19
문제! iframe에서 수신 된 응답은 다른 도메인에 있으므로 기본 창에 액세스 할 수 없으며 iframe이 기본 창에 액세스 할 수 없습니다. :( 그래서이 솔루션은 단지 POST를 수행하기위한 좋은 것 같다,하지만 당신은 나중에 응답을 구문 분석 할 수 없습니다
이도 Schacham

2
응답 문자열을 사용하여 부모의 함수를 호출하는 JavaScript 함수에 대한 응답의 body 태그에서 onload를 설정하십시오.
Lou Franco

이 답변은 저에게 효과가 없었습니다. 아래에 내 변형을 게시했습니다.
Dan Fabulich

24

간단하게 유지하십시오.

  1. 도메인 간 POST :
    사용crossDomain: true,

  2. 페이지를 새로 고치면 안됩니다.
    아니요,서버가 응답을 다시 보낼 때success또는error비동기 콜백이 호출되므로페이지를 새로 고치지 않습니다.


스크립트 예 :

$.ajax({
        type: "POST",
        url: "http://www.yoururl.com/",
        crossDomain: true,
        data: 'param1=value1&param2=value2',
        success: function (data) {
            // do something with server response data
        },
        error: function (err) {
            // handle your error logic here
        }
    });

8
crossDomain: true이상하게도 실제 도메인 간 요청과는 전혀 관련이 없습니다. 요청이 도메인 간인 경우 jquery는이를 자동으로 true로 설정합니다.
Kevin B

16

관련된 모든 서버에 액세스 할 수있는 경우 다른 도메인에서 요청중인 페이지의 회신 헤더에 다음을 입력하십시오.

PHP :

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

예를 들어 Drupal의 xmlrpc.php 코드에서 다음을 수행합니다.

function xmlrpc_server_output($xml) {
    $xml = '<?xml version="1.0"?>'."\n". $xml;
    header('Connection: close');
    header('Content-Length: '. strlen($xml));
    header('Access-Control-Allow-Origin: *');
    header('Content-Type: application/x-www-form-urlencoded');
    header('Date: '. date('r'));
    // $xml = str_replace("\n", " ", $xml); 

    echo $xml;
    exit;
}

보안 문제가 발생할 수 있으므로 요청을 확인하기 위해 적절한 조치를 취해야합니다.



6
  1. 두 개의 숨겨진 iframe을 만듭니다 (css 스타일에 "display : none;"추가). 두 번째 iframe이 자신의 도메인에있는 무언가를 가리 키도록합니다.

  2. 숨겨진 양식을 만들고 target = 첫 번째 iframe으로 메소드를 "post"로 설정하고 선택적으로 enctype을 "multipart / form-data"로 설정합니다 (그림과 같은 여러 부분으로 데이터를 보내려고하므로 POST를 수행하려고합니다. ?)

  3. 준비되면, submit () 양식을 POST로 만드십시오.

  4. 다른 도메인에서 Iframe과의 도메인 간 통신 ( http://softwareas.com/cross-domain-communication-with-iframes )을 수행하는 자바 스크립트를 반환하도록하면 운이 좋으며 응답을 캡처 할 수 있습니다 게다가.

물론 서버를 프록시로 사용하려면이 모든 것을 피할 수 있습니다. 다른 서버가 IP 불일치를 통지하도록 설정되어 있지 않다고 가정하면 요청을 다른 서버로 프록시 처리하고 응답을 얻고 원하는 것을 반환합니다.


6

한 가지 더 중요한 점 !!! 위의 에서는 사용 방법을 설명했습니다.

$.ajax({
    type     : 'POST',
    dataType : 'json', 
    url      : 'another-remote-server',
    ...
});

JQuery 1.6 이하에는 도메인 간 XHR에 버그가 있습니다. Firebug에 따르면 OPTIONS 이외의 요청은 전송되지 않았습니다. POST가 없습니다. 조금도.

5 시간 동안 코드를 테스트 / 튜닝했습니다. 원격 서버 (스크립트)에 많은 헤더 추가 효과가 없습니다. 그러나 나중에 JQuery lib를 1.6.4로 업데이트했으며 모든 것이 매력처럼 작동합니다.


오페라 10.61이 아닌 Whoopps. 마지막으로 내 도메인에서 PHP 프록시를 사용하기로 결정했습니다.
BasTaller

PHP 프록시를 어떻게 사용 했습니까? 저를 안내해 줄 수 있습니까?
Zoran777

아래 답변을보십시오 (예 : Ivan Durst
BasTaller

5

JQuery AJAX를 사용하여 ASP.net MVC 환경에서이 작업을 수행하려면 다음 단계를 수행하십시오 ( 스레드 에서 제공되는 솔루션의 요약입니다 ).

"caller.com"(모든 웹 사이트 일 수 있음)이 "server.com"(ASP.net MVC 응용 프로그램)에 게시되어야한다고 가정합니다.

  1. "server.com"앱의 Web.config에서 다음 섹션을 추가하십시오.

      <httpProtocol>
          <customHeaders>
              <add name="Access-Control-Allow-Origin" value="*" />
              <add name="Access-Control-Allow-Headers" value="Content-Type" />
              <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" />
          </customHeaders>
      </httpProtocol>
  2. "server.com"에서 우리는 게시 할 컨트롤러 ( "Home")에 대해 다음과 같은 작업을 수행합니다.

    [HttpPost]
    public JsonResult Save()
    {
        //Handle the post data...
    
        return Json(
            new
            {
                IsSuccess = true
            });
    }
  3. 그런 다음 "caller.com"에서 다음과 같이 양식 (html ID가 "formId"인)에서 "server.com"으로 데이터를 게시하십시오.

    $.ajax({
            type: "POST",
            url: "http://www.server.com/home/save",
            dataType: 'json',
            crossDomain: true,
            data: $(formId).serialize(),
            success: function (jsonResult) {
               //do what ever with the reply
            },
            error: function (jqXHR, textStatus) {
                //handle error
            }
        });

4

html5 기능을 사용하는 또 다른 방법이 있습니다. 다른 도메인에서 호스팅되는 프록시 iframe을 사용하고 postMessage를 사용하여 해당 iframe에 메시지를 보낸 다음 iframe은 POST 요청 (동일한 도메인에서)을 수행하고 postMessage를 상위 창에 다시 배치하여 다시 게시 할 수 있습니다.

sender.com의 부모

var win = $('iframe')[0].contentWindow

function get(event) {
    if (event.origin === "http://reciver.com") {
        // event.data is response from POST
    }
}

if (window.addEventListener){
    addEventListener("message", get, false)
} else {
    attachEvent("onmessage", get)
}
win.postMessage(JSON.stringify({url: "URL", data: {}}),"http://reciver.com");

reciver.com의 iframe

function listener(event) {
    if (event.origin === "http://sender.com") {
        var data = JSON.parse(event.data);
        $.post(data.url, data.data, function(reponse) {
            window.parent.postMessage(reponse, "*");
        });
    }
}
// don't know if we can use jQuery here
if (window.addEventListener){
    addEventListener("message", listener, false)
} else {
    attachEvent("onmessage", listener)
}

stackoverflow.com/questions/38940932/…에 관련 질문이 있습니다 . 샘플을 기반으로 플러그인 또는 일반 함수를 만들 수 있습니까?
Andrus


이 코드는 수신자 페이지를 수정해야합니다. 수신자 페이지를 수정할 수없는 경우 응답을 읽는 방법은 무엇입니까?
Andrus

@Andrus 당신은 recever.com iframe에 액세스 할 필요가 없습니다 거기에 아약스 요청을 보냅니다. iframe이 없으면 요청이 없습니다.
jcubic

3

high-level .... other-serve.your-server.com이 other-server.com을 가리 키도록 서버에 cname 설정이 있어야합니다.

페이지가 보이지 않는 iframe을 동적으로 생성하여 other-server.com으로의 전송 역할을합니다. 그런 다음 JS를 통해 페이지에서 other-server.com으로 통신하고 데이터를 다시 페이지로 리턴하는 콜백을 가져와야합니다.

가능하지만 your-server.com 및 other-server.com의 조정이 필요합니다


CNAME을 사용하여 경로 재 지정조차 생각하지 않았습니다. 좋은 전화! 아직 시도하지 않았지만 CNAME이 브라우저가 동일한 사이트와 상호 작용한다고 생각하도록 속일 것이라고 가정합니다. 나는 그것을 사용하여 Amazon S3에 게시 할 것이므로 이것이 효과가 있기를 바랍니다.
SpencerElliott

1
이것이 어떻게 해결되는지 알지 못합니다. 다른 하위 도메인으로 교차하는 것은 다른 도메인으로 교차하는 것과 같은 문제가 있습니다.
Octopus


2

이것은 오래된 질문이지만 일부 새로운 기술은 누군가를 도울 수 있습니다.

다른 서버에 대한 관리 액세스 권한이 있으면 opensource Forge 프로젝트를 사용하여 교차 도메인 POST를 수행 할 수 있습니다. Forge는 Flash의 원시 소켓 API를 이용하는 도메인 간 JavaScript XmlHttpRequest 래퍼를 제공합니다. POST는 TLS를 통해 수행 될 수도 있습니다.

게시하려는 서버에 대한 관리 액세스 권한이 필요한 이유는 도메인에서의 액세스를 허용하는 도메인 간 정책을 제공해야하기 때문입니다.

http://github.com/digitalbazaar/forge


2

나는 이것이 오래된 질문이라는 것을 알고 있지만 내 접근법을 공유하고 싶었습니다. 나는 cURL을 매우 쉽고 일관된 프록시로 사용합니다. submit.php라는 PHP 페이지를 작성하고 다음 코드를 추가하십시오.

<?

function post($url, $data) {
$header = array("User-Agent: " . $_SERVER["HTTP_USER_AGENT"], "Content-Type: application/x-www-form-urlencoded");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}

$url = "your cross domain request here";
$data = $_SERVER["QUERY_STRING"];
echo(post($url, $data));

그런 다음 js에서 (jQuery here) :

$.ajax({
type: 'POST',
url: 'submit.php',
crossDomain: true,
data: '{"some":"json"}',
dataType: 'json',
success: function(responseData, textStatus, jqXHR) {
    var value = responseData.someKey;
},
error: function (responseData, textStatus, errorThrown) {
    alert('POST failed.');
}
});

1

YQL 사용자 정의 테이블 + JS XHR로 가능해야합니다. http://developer.yahoo.com/yql/guide/index.html

클라이언트 측 (js) html 긁기를 수행하고 잘 작동합니다 (인터넷 / 재생 목록 / 가사 / 마지막 FM 정보 검색, 모든 클라이언트 js + YQL로 전체 오디오 플레이어가 있음)


1

CORS는 당신을위한 것입니다. CORS는 "Cross Origin Resource Sharing"이며 도메인 간 요청을 보내는 방법입니다. 이제 XMLHttpRequest2 및 Fetch API는 CORS를 지원하며 POST 및 GET 요청을 모두 보낼 수 있습니다.

그러나 서버는 Access-Control-Allow-Origin 을 구체적으로 요구해야합니다. 하며 '*'로 설정할 수 없습니다.

그리고 원점이 요청을 보내려면 JSONP가 필요합니다 ( Access-Control-Allow-Origin 도 설정해야 하지만 '*'일 수 있음)

선택 방법을 모르는 경우 많은 요청 방법을 위해서는 완전한 기능적 구성 요소가 필요하다고 생각합니다. 단순한 구성 요소를 소개하겠습니다 https://github.com/Joker-Jelly/catta


최신 브라우저 (> IE9, Chrome, FF, Edge 등)를 사용하는 경우 단순하지만 아름다운 구성 요소 https://github.com/Joker-Jelly/catta 를 사용하는 것이 좋습니다 . 3KB 이상이며 동일한 치명적인 샘플 구문 및 옵션으로 Fetch, AJAX 및 JSONP를 지원합니다.

catta('./data/simple.json').then(function (res) {
  console.log(res);
});

또한 ES6 모듈, CommonJS 및 심지어 <script>HTML 과 같이 프로젝트로 가져 오는 모든 방법을 지원합니다 .


1

크로스 도메인 서버에 액세스 할 수 있고 서버 측에서 코드를 변경하지 않으려면 'xdomain'이라는 라이브러리를 사용할 수 있습니다.

작동 방식 :

1 단계 : 서버 1 : x 도메인 라이브러리 포함 및 교차 도메인을 슬레이브로 구성

<script src="js/xdomain.min.js" slave="https://crossdomain_server/proxy.html"></script>

2 단계 : 도메인 간 서버에서 proxy.html 파일을 만들고 서버 1을 마스터로 포함합니다.

proxy.html:
<!DOCTYPE HTML>
<script src="js/xdomain.min.js"></script>
<script>
  xdomain.masters({
    "https://server1" : '*'
  });
</script>

3 단계 :

이제 server1에서 엔드 포인트로 proxy.html에 대한 AJAX 호출을 작성할 수 있습니다. 이것은 CORS 요청을 무시합니다. 라이브러리는 내부적으로 자격 증명 및 가능한 모든 방법 (GET, POST 등)과 함께 작동하는 iframe 솔루션을 사용합니다.

쿼리 아약스 코드 :

$.ajax({
        url: 'https://crossdomain_server/proxy.html',
        type: "POST",
        data: JSON.stringify(_data),
        dataType: "json",
        contentType: "application/json; charset=utf-8"
    })
    .done(_success)
    .fail(_failed)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.