programing

jQuery.getJSON - 접근컨트롤-허용-발신원 문제

nicegoodjob 2023. 3. 6. 22:14
반응형

jQuery.getJSON - 접근컨트롤-허용-발신원 문제

의 jQuery의를 사용하고 $.getJSON()JSON j j j j j j j j j j j j j j j j j j j j j j j j j j j.

는 JSON의 URL과 example.com몰랐습니다만, 같은 URL에 접속하고 있었기 때문에 JSON 데이터를 로드할 수 없었습니다., 「 」라고 하는 것이 있었습니다.XMLHttpRequestAccess-Control-Allow-Origin.

,만, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★$.getJSON()그게 바로 해결 방법이겠지만, 분명히 효과가 없었어요.헤더나 기능에서 변경해야 할 것이 있습니까?

도와주셔서 대단히 감사합니다.

플플용용 it it it it it it를 사용하세요.$.getJSON()에 "URL"을 포함하기만 됩니다.

callback=?

파라미터로 지정합니다.그러면 콜이 도메인 간 콜에 필요한 JSONP로 변환됩니다.상세정보 : http://api.jquery.com/jQuery.getJSON/

대신 JSON-P를 사용하는 것이 좋습니다(아래 참조).먼저 간단한 설명입니다.

말씀하신 헤더는 Cross Origin Resource Sharing 표준에서 가져온 것입니다.사용자가 실제로 사용하는 브라우저에서는 지원되지 않으며, 다른 브라우저에서는 특별한 오브젝트를 사용해야 합니다(Microsoft).XDomainRequest)XMLHttpRequestjQuery 。, 해, 송신원 「 」, 「 」, 「 」, 「 」)을 .www.xxxx.com를 참조해 주세요.

요청하려는 JSON 데이터를 가져오려면 기본적으로 다음 세 가지 옵션이 있습니다.

  1. 가능하면 로드하는 파일의 위치를 수정하여 로드하는 문서와 동일한 원본이 되도록 최대한의 호환성을 유지할 수 있습니다.(Ajax를 통해 로딩해야 하므로 동일한 오리진 정책 문제가 나타납니다.)

  2. SOP의 대상이 아닌 JSON-P를 사용합니다.jQuery에는 JSON-P에 대한 지원이 포함되어 있습니다.ajaxcall을 설정하기만 하면 .dataType'jsonp' jQuery'입니다.여기에는 서버측 변경이 필요하지만 그다지 큰 변경은 필요하지 않습니다.JSON일 경우 "callback" 수 있습니다.

    {"weather": "Dreary start but soon brightening into a fine summer day."}
    

    스크립트는 "callback" 쿼리 문자열 파라미터(파라미터의 값이 "jsop123"이라고 합니다)를 검색하여 JavaScript 함수 호출 구문에서 해당 JSON을 래핑합니다.

    jsonp123({"weather": "Dreary start but soon brightening into a fine summer day."});
    

    바로 그겁니다.JSON-P는 매우 광범위하게 호환됩니다(JavaScript를 통해 작동하므로).scriptTags) JSON-P는 전용입니다.GET하지만, 아니다POST(이것도 동작하기 때문에)script태그)

  3. CORS(견적한 헤더와 관련된 메커니즘)를 사용합니다.위에 링크된 사양에 대한 자세한 내용은 기본적으로 다음과 같습니다.

    A. 브라우저는 다음 명령어를 사용하여 서버에 "preflight" 메시지를 보냅니다.OPTIONSHTTP 동사(방식).이 파일에는 다양한 헤더가 포함되어 있습니다.GET또는POST또한 "Origin", "Access-Control-Request-Method"(예:GET또는POST및 "Access-Control-Request-Headers"(송신하는 헤더)입니다.

    B. PHP는 이 정보를 바탕으로 요청이 정상인지 여부를 판단하고, 정상일 경우 허용되는 값을 포함하는 "Access-Control-Allow-Origin", "Access-Control-Allow-Methods" 및 "Access-Control-Allow-Headers" 헤더로 응답합니다.해당 응답으로 본문(페이지)을 보내지 않습니다.

    C. 브라우저는 사용자의 응답을 보고 실제 응답을 보낼 수 있는지 여부를 확인합니다.GET또는POST이 경우 "Origin" 및 다양한 "Access-Control-Request-xyz" 헤더를 사용하여 요청을 다시 보냅니다.

    D. PHP는 헤더를 다시 검사하여 정상인지 확인하고, 정상일 경우 요청에 응답합니다.

    유사 코드(PHP를 많이 하지 않았기 때문에 여기서 PHP 구문을 실행하려고 하지 않습니다):

    // Find out what the request is asking for
    corsOrigin = get_request_header("Origin")
    corsMethod = get_request_header("Access-Control-Request-Method")
    corsHeaders = get_request_header("Access-Control-Request-Headers")
    if corsOrigin is null or "null" {
        // Requests from a `file://` path seem to come through without an
        // origin or with "null" (literally) as the origin.
        // In my case, for testing, I wanted to allow those and so I output
        // "*", but you may want to go another way.
        corsOrigin = "*"
    }
    
    // Decide whether to accept that request with those headers
    // If so:
    
    // Respond with headers saying what's allowed (here we're just echoing what they
    // asked for, except we may be using "*" [all] instead of the actual origin for
    // the "Access-Control-Allow-Origin" one)
    set_response_header("Access-Control-Allow-Origin", corsOrigin)
    set_response_header("Access-Control-Allow-Methods", corsMethod)
    set_response_header("Access-Control-Allow-Headers", corsHeaders)
    if the HTTP request method is "OPTIONS" {
        // Done, no body in response to OPTIONS
        stop
    }
    // Process the GET or POST here; output the body of the response
    

    이것은 의사 코드임을 재차 강조합니다.

언급URL : https://stackoverflow.com/questions/6396623/jquery-getjson-access-control-allow-origin-issue

반응형