복붙노트

[JQUERY] 왜 내 자바 스크립트 코드가 수신 않는 '없음'액세스 제어 - - 원산지를 허용 '헤더가 요청 된 자원에 존재하는 "우체부하지 않는 동안, 오류?

JQUERY

왜 내 자바 스크립트 코드가 수신 않는 '없음'액세스 제어 - - 원산지를 허용 '헤더가 요청 된 자원에 존재하는 "우체부하지 않는 동안, 오류?

해결법


  1. 1.내가 그것을 이해하면 바로 당신은 당신의 페이지에보다 다른 도메인으로 XMLHttpRequest의를하고 있습니다. 그것은 일반적으로 보안상의 이유로 같은 기원에서 요청을 허용하는 브라우저 그래서 그것을 차단하고 있습니다. 크로스 도메인 요청을 수행 할 때 뭔가 다른 할 필요가있다. CORS를 사용하고 있음을 달성하는 방법에 대한 튜토리얼.

    내가 그것을 이해하면 바로 당신은 당신의 페이지에보다 다른 도메인으로 XMLHttpRequest의를하고 있습니다. 그것은 일반적으로 보안상의 이유로 같은 기원에서 요청을 허용하는 브라우저 그래서 그것을 차단하고 있습니다. 크로스 도메인 요청을 수행 할 때 뭔가 다른 할 필요가있다. CORS를 사용하고 있음을 달성하는 방법에 대한 튜토리얼.

    당신이 우편 배달부를 사용하는 경우 그들은이 정책에 의해 제한되지 않습니다. 크로스 원산지 XMLHttpRequest의에서 인용 :


  2. 2.그것은 당신이 PHP를 사용하는 경우 해결하기 위해 매우 간단합니다. 그냥 요청을 처리하여 PHP 페이지의 시작 부분에 다음 스크립트를 추가 :

    그것은 당신이 PHP를 사용하는 경우 해결하기 위해 매우 간단합니다. 그냥 요청을 처리하여 PHP 페이지의 시작 부분에 다음 스크립트를 추가 :

    <?php header('Access-Control-Allow-Origin: *'); ?>
    

    당신이 사용하는 경우 다음 줄을 유엔 - 주석에 의해 노드 - 빨강 / settings.js 파일에 CORS 수 있도록해야 노드 - 빨간색 :

    // The following property can be used to configure cross-origin resource sharing
    // in the HTTP nodes.
    // See https://github.com/troygoode/node-cors#configuration-options for
    // details on its contents. The following is a basic permissive set of options:
    httpNodeCors: {
     origin: "*",
     methods: "GET,PUT,POST,DELETE"
    },
    

    당신은 질문 같은 플라스크를 사용하는 경우; 당신은 플라스크-고르를 설치하려면 먼저해야

    $ pip install -U flask-cors
    

    그런 다음 응용 프로그램에서 플라스크 고르를 포함한다.

    from flask_cors import CORS
    

    간단한 응용 프로그램은 다음과 같이 표시됩니다

    from flask import Flask
    from flask_cors import CORS
    
    app = Flask(__name__)
    CORS(app)
    
    @app.route("/")
    def helloWorld():
      return "Hello, cross-origin-world!"
    

    자세한 내용은, 당신은 플라스크 문서를 확인할 수 있습니다.


  3. 3.때문에 $ 아약스 ({유형 : "POST"는 - 옵션을 호출 (.post $ - POST를 호출

    때문에 $ 아약스 ({유형 : "POST"는 - 옵션을 호출 (.post $ - POST를 호출

    모두 다르다. 우리가 그것을 호출 할 때 우체부 호출은 "POST"는 적절하지만, 그것은 "옵션"입니다.

    C # 웹 서비스 용 - 웹 API

    <의 system.webServer> 태그 아래에 web.config 파일에 다음 코드를 추가하십시오. 이것은 작동합니다 :

    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
        </customHeaders>
    </httpProtocol>
    

    당신은 Ajax 호출에 어떤 실수를하고 있지 않은지 확인하십시오

    $.ajax({
        url: 'http://mysite.microsoft.sample.xyz.com/api/mycall',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        type: "POST", /* or type:"GET" or type:"PUT" */
        dataType: "json",
        data: {
        },
        success: function (result) {
            console.log(result);
        },
        error: function () {
            console.log("error");
        }
    });
    

    참고 : 타사 웹 사이트에서 콘텐츠를 다운로드를 찾고 있다면 다음이 도움이되지 않습니다. 당신은 자바 스크립트를 다음 코드를 시도하지만 수 없습니다.

    System.Net.WebClient wc = new System.Net.WebClient();
    string str = wc.DownloadString("http://mysite.microsoft.sample.xyz.com/api/mycall");
    

  4. 4.이 첫 번째 가공하기 때문에, 귀하의 질문에서 // myApiUrl / 로그인 : API로 아래의 조사에서, 나는 HTTP 대신 http://example.com을 사용합니다.

    이 첫 번째 가공하기 때문에, 귀하의 질문에서 // myApiUrl / 로그인 : API로 아래의 조사에서, 나는 HTTP 대신 http://example.com을 사용합니다.

    //my-site.local : 나는 당신의 페이지는 HTTP에 있다고 가정 8088.

    서로 다른 결과를 볼 이유는 우체부입니다 :

    이 사이트 및 API가 같은 도메인이있는 경우 요청을 보내는 브라우저 '방식과 유사합니다 (브라우저는 또한 헤더 항목을 설정 리퍼러 = HTTP : //my-site.local : 8088, 그러나 나는 우체부에 표시되지 않습니다) . 원산지 헤더가 설정되어 있지 않은 경우, 일반적으로 서버는 기본적으로 이러한 요청을 할 수 있습니다.

    이 우체부는 요청을 전송하는 방법 표준 방법입니다. 그러나 브라우저가 귀하의 사이트와 API가 서로 다른 도메인이 다음 CORS가 자동으로 발생하고 브라우저 때 다른 요청을 보냅니다 :

    (헤더 참조자는 원점으로 동일한 값을 가진다). 그리고 지금 크롬의 콘솔 및 네트워크 탭에 당신은 볼 것이다 :

    당신이 호스트가있을 때! = 원점이 CORS이며, 서버는 이러한 요청, 기본적으로 그것은 일반적으로 블록을 감지 할 때.

    열고 HTML의 로컬 디렉토리의 내용, 그리고 요청을 보낼 때 원산지는 = null이 설정됩니다. 일반적으로, 모든 곳에서 HTML 사양이 불투명 기원, 당신은 원산지에 있음을 번역 할 수 있습니다 말한다 - 당신이 내 요청을 보낼 때 같은 상황은이 조각 이하 (그러나 여기에서 호스트 헤더가 설정되지 않은 모든)에서 같은