source

jQuery의 ajax crossDomain 속성을 사용하시겠습니까?

ittop 2023. 8. 15. 11:45
반응형

jQuery의 ajax crossDomain 속성을 사용하시겠습니까?

jQuery에 따라:

crossDomain (default: false for same-domain requests, true for cross-domain requests)Type: Boolean "crossDomain " (JSONP ") " "crossDomain " (JSONP ") " " " crossDomain " " true " " 입니다.예를 들어, 서버 측에서 다른 도메인으로 리디렉션할 수 있습니다.(추가된 버전: 1.5)

위의 내용을 이해할 수 없습니다.

코드가 다음인 경우

$(document).ready(function ()
{
    $.ajax(
    {
        url: 'http://es3.com/Handlers/MyHandler.ashx',
        cache: false,
        dataType: "jsonp",
        ...
        ...
    });
});

function aaa(json)
{
    alert(json.result);
}

그리고 다음을 지정합니다.datatype:jsonp내 브라우저에서 실행되는 스크립트이기 때문에 응답은 응용 프로그램/스크립트 마임 형식이 될 것입니다.

같은 도메인에서 이 코드를 실행할 때 그렇게 작동하지 않을 이유가 없습니다.(따라서 - 이 숙박업소의 용도가 보이지 않습니다.)

샘플을 만들었습니다.

2개의 도메인(호스트가 조정됨)이 있습니다.es2.com그리고.es3.com.

(따라서 코드의 URL은 항상 es3.com 입니다.)

테스트 #1:

코드실치의 합니다.es3.com 창으)로 표시)
코드실치의 합니다.es2.com 창으)로 표시됨)
crossDomain:false(누락 시 기본값).

차이점을 보세요: (https://i.stack.imgur.com/RKyZp.jpg) .

enter image description here

테스트 #2:

코드실치의 합니다.es3.com 창으)로 표시)
코드실치의 합니다.es2.com 창으)로 표시됨)
crossDomain:true <--->

(https://i.stack.imgur.com/xEcyd.jpg)

저는 아무런 차이가 없다고 생각합니다.

질문:.

/ 언제 설정해야 합니까?crossDomain 부동산?

기본값은 다음과 같습니다.

동일한 도메인 요청의 경우 false이고, crossDomain 요청의 경우 true입니다.

data-type는 값따라 의 됩니다.crossDomain설정:

"json": 응답을 JSON으로 평가하고 JavaScript 개체를 반환합니다.교차 도메인 "json" 요청이 요청 옵션에 jsonp: false를 포함하지 않는 한 "jsonp" 요청이 "jsonp"로 변환됩니다.

은 당이사있때기문에를 하고 있기 입니다.jsonpjson당신은 당신의 테스트에서 어떤 차이도 볼 수 없을 것입니다.

crossDomain 속성은 언제 설정해야 합니까?

한 도메인을 동일한만드는경우을메도인.json요청하면 사이트에서 요청을 다른 도메인으로 리디렉션하여 응답을 처리할 수 있습니다(HTTP 3XX를 통해). 그러면 다음을 설정해야 합니다.crossDomain호출 스크립트에서 응답을 읽을 수 있도록 속성을 true로 지정합니다.

이를 통해 동일한 오리진 요청을 할 때는 JSON을 검색할 수 있으며, 교차 오리진 요청을 할 때는 JSONP의 기능을 사용할 수 있습니다. 렉션도가서에메인 CORS활성화경다설수있습다니정할리을디음을 설정할 수 .jsonp: false요청 옵션에 있습니다.

example.com 에서 example.org 으로 요청합니다.

  • crossDomainTrue로 자동 설정됩니다.
  • 데이터 유형이 다음으로 설정됨jsonp.

결과: example.org 에서 JSONP를 반환했습니다.

example.com 에서 example.com 으로 요청합니다.

  • crossDomain자동으로 false로 설정됩니다.
  • 데이터 유형이 다음으로 설정됨jsonp.

결과: example.com 에서 JSONP를 반환했습니다.

example.com 에서 example.org 으로 요청합니다.

  • crossDomainTrue로 자동 설정됩니다.
  • 데이터 유형이 다음으로 설정됨json.

결과: example.org 에서 JSONP를 반환했습니다.

example.com 에서 example.com 으로 요청합니다.

  • crossDomain자동으로 false로 설정됩니다.
  • 데이터 유형이 다음으로 설정됨json.

결과: example.com 에서 JSON을 반환했습니다.

example.com 에서 example.org 으로 요청합니다.

  • crossDomainTrue로 자동 설정됩니다.
  • 데이터 유형이 다음으로 설정됨json.
  • jsonpfalse로 설정됩니다.
  • example.org 은 example.com 에 대한 CORS를 지원하지 않습니다.

결과: 브라우저에서 CORS 오류가 반환되었습니다.

example.com 에서 example.com 으로 요청하면 example.com 은 AJAX를 example.edu 으로 리디렉션합니다.

  • crossDomain수동으로 true로 설정합니다.
  • 데이터 유형이 다음으로 설정됨json.

결과: example.edu 에서 JSONP를 반환했습니다.

example.com 에서 example.org 으로 요청합니다.

  • crossDomainTrue로 자동 설정됩니다.
  • 데이터 유형이 다음으로 설정됨json.
  • jsonpfalse로 설정됩니다.
  • example.org 은 example.com 에 대한 CORS를 지원합니다.

결과: example.org 에서 JSON을 반환했습니다.

example.com 에서 example.com 으로 요청하면 example.com 은 AJAX를 example.edu 으로 리디렉션합니다.

  • crossDomain자동으로 false로 설정됩니다.
  • 데이터 유형이 다음으로 설정됨json.
  • example.edu 은 example.com 에 대한 CORS를 지원하지 않습니다.

결과: 브라우저에서 CORS 오류가 반환되었습니다.

에게 또 도메인이 .spanish.es2.com당신의 웹사이트의 스페인 사용자들에게 서비스를 제공합니다.

다음과 같은 요구 사항이 있습니다.

  1. 에 웹 es2.com

  2. 하기 »es2.com사용자 정보(또는 쿠키)를 전달하고 사용자 데이터를 가져옵니다.가 스페인이라면, 는 api입니다.spanish.es2.com동일한 데이터에 대해 호출해야 합니다.

  3. es2.com 에서 es2.com 으로 jQuery를 사용하여 스페인 사용자에 대해 Ajax 요청을 수행하는 경우:

    함포와 crossdomain: 사용자의 용안함 : 사자용입니다.es2.com로 http를 .spanish.es2.comAjax 동일 도메인 정책으로 인해 작동하지 않으며 Ajax가 실패합니다. url ->agax url -> url에서 리디렉션합니다.

    함포와 crossdomain :.com api의 싸인 되지 않으며 .enabled: es2.com api jsonp 파일의 http 파일은 ajax 파일입니다스크립트 태그의 src에서 리디렉션 -> 허용됨.

이것으로 분명히 밝혀지길 바랍니다.

누락된 경우 기본값이 false가 아닙니다.누락된 경우 도메인이 동일하지 않으면 true로 기본 설정됩니다(위의 첫 번째 샘플에서처럼).거의 모든 경우는 아니지만 기본값으로 유지할 수 있다고 생각합니다.

또한 교차 도메인 매개 변수를 설정할 때 JQuery는 기본적으로 JSONP가 아닌 CORS를 사용하려고 시도합니다.

다음은 JQuery 소스: https://github.com/jquery/jquery/blob/master/src/ajax/xhr.js 의 관련 스니펫입니다.

"xhrSupported" 변수...

xhrSupported = jQuery.ajaxSettings.xhr();

..CORS 지원을 확인하는 데 사용됩니다.

support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );

AJAX 전화를 걸 때 확인됩니다.

jQuery.ajaxTransport(function( options ) {
        var callback;

        // Cross domain only allowed if supported through XMLHttpRequest
        if ( support.cors || xhrSupported && !options.crossDomain ) 

이것이 도움이 되길 바랍니다!

제가 보기에는 작전이 맞습니다.dataType을 jsonp로 설정하면 JSONP 유형 요청이 생성되고 결과가 스크립트 블록에 기록되어 실행됩니다.따라서 교차 도메인을 true로 설정하여 JSONP를 강제하는 것은 중복된 것처럼 보입니다.

하지만.설명서에는 "JSONP와 같은 도메인 간 요청을 강제로 적용하려는 경우"가 명시되어 있으므로 도메인 간 동작을 강제로 적용하려는 다른 경우가 있을 수 있음을 암시합니다.하지만 저는 그 사례들이 무엇일지 확신할 수 없습니다.

이미 JSONP를 지정하고 있는 경우에는 crossDomain 매개 변수를 사용할 수 없습니다.jQuery가 로컬 도메인이라도 JSONP를 요청하라고만 합니다.

JSON 또는 JSONP를 반환하는 로컬 서비스를 사용하여 기계를 작업하고 있다고 가정합니다.플레인을 사용할 수 있습니다.$.ajax()통화, 그것은 잘 작동합니다.그러나 프로덕션에서는 사용자가 몇 가지 특별한 조건을 충족할 경우 서버가 사용자의 요청을 다른 도메인으로 리디렉션합니다.때때로 응답이 도메인 외부에서 오기 때문에 Prod는 JSONP를 요청해야 합니다.

그것을 만드는 것$.ajax()을 제외하고 전화를crossDomain: true또는datatype: 'jsonp'응답이 일반 JSON일 수 있다고 가정하므로 코드가 프로덕션에서 실패합니다.

또한 YQL을 사용하여 JSONP를 통해 교차 도메인 XML을 로드하는 것과 같은 사전 디지테이션을 통해 교차 도메인 XML을 얻을 수 있습니다. 는 JSONP로 포장하는 것에 불과합니다.

당신의 질문은 jSonp를 jQuery와 함께 사용할 때 발생한 문제를 이해하는 데 큰 도움이 되었습니다.
저의 경우 외부 도메인으로 JSONP 통화를 해야 했습니다.
하지만 URL은 우리의 도메인에서 구성되어야 했습니다.

를 들어,는 제 .com es2.com 아래에 있다고 합니다.

es2.com 에서 JSONP 통화
es2.com es3.com?newConstructedUrl=someRandomValue 으로 리디렉션합니다.
es3.com?newConstructedUrl=NewCoolValue 을 es2.com 으로 리디렉션합니다.
es2.com 응답에 새 쿠키를 설정합니다.

코드는 localhost에서 정상적으로 작동했지만 es2 환경에는 쿠키가 없었습니다.
그리고 디버거를 보니 es2 환경에서 XHR로 요청이 이루어지고 있었습니다.
그런 다음 crossDomain 매개 변수를 true로 설정해야 했습니다.JSONP 요청은 es2.com 에서도 이루어졌습니다.

내 사용 사례가 명확하기를 바랍니다!

언급URL : https://stackoverflow.com/questions/21255194/usages-of-jquerys-ajax-crossdomain-property

반응형