programing

크롬이 CORS OPTION 요청을 취소하는 이유

cafebook 2023. 9. 5. 20:46
반응형

크롬이 CORS OPTION 요청을 취소하는 이유

제 앱에서 HTTP에서 HTTPS로 AJAX 요청을 만들고 있습니다.이것은 제가 CORS가 필요하다는 것을 의미합니다.그래서 jQuery.jax에 헤더와 파라미터를 추가하여 테스트합니다.파이어폭스에서는 모든 것이 정상적으로 작동하지만 크롬에서는 그렇지 않습니다.Chrome은 사전에 표시된 모든 요청(OPTIONS)을 "죽입니다".

jQuery 스크립트:

$(document).on('click', 'a.ajax', function(e) {
    e.preventDefault();
    $.ajax(this.href, {
        type: 'GET',
        dataType: 'json',
        crossDomain: false,
        headers: {'X-Requested-With': 'XMLHttpRequest'},
        xhrFields: {
            withCredentials: true
        }
    });
    return false;
});

HTTP 덤프:

> OPTIONS /foo HTTP/1.1
> User-Agent: curl/7.29.0
> Host: local.bar.cz
> Accept: */*
> Access-Control-Request-Headers:accept, origin, x-requested-with
> Access-Control-Request-Method:GET
> Origin:http://local.bar.cz
> 
< HTTP/1.1 204
< Server: nginx/1.2.7
< Date: Wed, 27 Feb 2013 15:06:54 GMT
< Content-Type: text/html; charset=utf-8
< Connection: keep-alive
< X-Powered-By: Nette Framework
< X-Frame-Options: SAMEORIGIN
< Access-Control-Allow-Origin: http://local.bar.cz
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Headers: accept, origin, x-requested-with
< Access-Control-Allow-Methods: OPTIONS, GET, POST, HEAD
< 

크롬이 왜 이 요청을 죽였는지 아는 사람?

https 서버에 신뢰할 수 없는 인증서가 있을 수 있습니다.그렇다면 먼저 브라우저를 사용하여 URL에 액세스하고 신뢰할 수 없는 연결을 수락하십시오.

인증서를 수락한다고 해서 항상 이 문제가 해결되는 것은 아닙니다.자체 서명된 인증서를 사용하는 경우, 먼저 수락하더라도 크롬은 경우에 따라 비행 전 옵션 요청을 취소합니다.2011년부터 지금까지 이런 식이었습니다.

이 페이지에 나와 있는 해결 방법은 자체 서명된 인증서를 시스템의 신뢰할 수 있는 인증서 목록에 추가하는 것입니다.

Mac에서 이 작업을 수행하는 방법(OS 10.8.5와 함께 작동하도록 원래 버전에서 약간 수정됨) http://www.robpeck.com/2010/10/google-chrome-mac-os-x-and-self-signed-ssl-certificates/) :

  1. 주소 표시줄에서 X 표시가 있는 작은 자물쇠를 클릭합니다.그러면 작은 정보 화면이 나타납니다.
  2. "인증서 정보" 단추를 누릅니다.
  3. 인증서 이미지를 클릭하여 끌어다 놓습니다. 바탕 화면 열려 있는 파인더 창(바탕 화면으로 끄는 것을 좋아하지 않는 것으로 표시됨).
  4. 생성된 파일을 두 번 클릭합니다.키 체인 액세스 유틸리티가 표시됩니다.잠금을 해제하려면 암호를 입력하십시오.
  5. 로그인 키 체인이 아닌 시스템 키 체인에 인증서를 추가해야 합니다.아무 효과가 없는 것처럼 보이더라도 "항상 신뢰"를 클릭합니다.
  6. 추가된 후 두 번 클릭합니다.다시 인증해야 할 수도 있습니다.
  7. "신뢰" 섹션을 확장합니다."이 인증서를 사용할 때"는 "항상 신뢰"로 설정됩니다.

인증서를 완전히 신뢰하려면 Chrome을 다시 시작해야 할 수도 있습니다(URL 표시줄에서 행복한 녹색 잠금으로 변경되는 아이콘).

절대적으로 동일한 결과를 내는 또 다른 사례가 있다는 것을 언급할 가치가 있습니다.

반환 요청을 기다리는 동안(예: 약속을 통해) 브라우저를 다른 URL(window.location...)로 재배치하면 OPTIONS 요청이 제출되지만 이후 응답(POST/GET/*)은 취소됩니다(자연스럽게 ...).

네.. 물론이죠..만약 당신이 그렇게 한다면 그것은 버그입니다... 하지만 그것은 똑같이 보이고 잘못된 장소를 찾는 데 몇 시간이 걸릴 수 있습니다.다음과 같은 코드를 고려합니다.

makeAjaxCallThatReturnsAPromise.then(
    function () { // doSomething },
    function () { // doSomethingElse }
);
location.replace('http://some.where/');

언급URL : https://stackoverflow.com/questions/15115746/why-chrome-cancel-cors-option-request

반응형