복붙노트

[JQUERY] AJAX는 크롬에 / DELETE 대신 GET / POST / PUT의 옵션을 전송?

JQUERY

AJAX는 크롬에 / DELETE 대신 GET / POST / PUT의 옵션을 전송?

해결법


  1. 1.크롬은 CORS 헤더를 찾는 요청을 프리 플라이트된다. 요청이 허용되는 경우, 그 다음 실제 요청을 보낼 것입니다. 이 크로스 도메인을하고 있다면, 당신은 간단하게 처리하거나 다른 요청이 아닌 크로스 도메인을 만들 수있는 방법을 찾아야 할 것이다. JQuery와 버그가 이뤄져 - 수정로 폐쇄 된 이유입니다. 이것은 의도적으로 설계된 동작입니다.

    크롬은 CORS 헤더를 찾는 요청을 프리 플라이트된다. 요청이 허용되는 경우, 그 다음 실제 요청을 보낼 것입니다. 이 크로스 도메인을하고 있다면, 당신은 간단하게 처리하거나 다른 요청이 아닌 크로스 도메인을 만들 수있는 방법을 찾아야 할 것이다. JQuery와 버그가 이뤄져 - 수정로 폐쇄 된 이유입니다. 이것은 의도적으로 설계된 동작입니다.


  2. 2.요청이 AJAX 호출이 자동으로 크로스 원산지 자원 즉 수단에 요청이 자동으로 옵션에 대한 어떤 검사를 요청되는 문제 (CORS) 요청 간주됩니다 80/443 기본 포트에 전송되지 않는다는 사실을 바탕으로 서버의 / 서블릿의 측면에 CORS 헤더.

    요청이 AJAX 호출이 자동으로 크로스 원산지 자원 즉 수단에 요청이 자동으로 옵션에 대한 어떤 검사를 요청되는 문제 (CORS) 요청 간주됩니다 80/443 기본 포트에 전송되지 않는다는 사실을 바탕으로 서버의 / 서블릿의 측면에 CORS 헤더.

    이것은 당신이 설정 한 경우에도 발생

    crossOrigin: false;
    

    또는 경우에 당신이 그것을 ommit.

    ! 57,124 : 그 이유는 단순히 로컬 호스트 = localhost입니다. 포트없이 단지 로컬 호스트로 전송 시도 - 그것은 실패합니다, 요청 된 목표에 도달 할 수 없기 때문에, 그러나 통지 도메인 이름 인 경우 옵션이 POST 전에 요청하지 않고 요청이 전송 동일있다.


  3. 3.나는 케빈 B에 동의, 버그 리포트는 모든 것을 말한다. 당신이 크로스 도메인 아약스 호출을하려고하는 것 같은데. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript : 동일한 원본 정책에 익숙하지 않은 경우에 당신은 여기에서 시작할 수 있습니다.

    나는 케빈 B에 동의, 버그 리포트는 모든 것을 말한다. 당신이 크로스 도메인 아약스 호출을하려고하는 것 같은데. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript : 동일한 원본 정책에 익숙하지 않은 경우에 당신은 여기에서 시작할 수 있습니다.

    이것은 크로스 도메인 Ajax 호출 수 없습니다 경우, 대상 상대 URL을 시도하고 문제가 사라지는 지 확인. 당신은 JSONP로 정말 필사적 인 모습을,하지만, 신체 상해의 불릴만 한 녀석이 도사리고 조심하십시오. 정말 훨씬 더 우리가 당신을 도울 수 없습니다.


  4. 4.일반 GET 다른 이름으로 / POST를 통해 PARAMS을 전달하고 서버 측 코드 핸들에게 그것을 할 수 있다면.

    일반 GET 다른 이름으로 / POST를 통해 PARAMS을 전달하고 서버 측 코드 핸들에게 그것을 할 수 있다면.

    나는 바이 패스 CORS에 내 자신의 프록시와 비슷한 문제가 있었다 나는 크롬에서 POST-> OPTION 같은 오류가 발생했습니다. 내가 (GET에서 예 AuthorizatinJack) 더미 형식으로 전달 결국 (. 귀하의 경우 여기에 "X-리튬 형식"과 "X-사용자 이름") 내 경우에는 인증 헤더 있었고, 난에 대한 코드를 변경 내 목적지에 전화를 걸 때 프록시는 헤더에 그 전원을 켭니다. 여기가 PHP에 있습니다 :

    if (isset($_GET['AuthorizationJack'])) {
        $request_headers[] = "Authorization: Basic ".$_GET['AuthorizationJack'];
    }
    

  5. 5.내 경우에는 내가 AWS (API 게이트웨이)에서 호스팅하는 API를 호출하고 있습니다. 나는 API 자신의 도메인이 아닌 다른 도메인에서 API를 호출하려고 할 때 오류가 발생했습니다. 내가 API 소유자이야 때문에 아마존 문서에 설명 된대로 나는, 테스트 환경에 대한 CORS 수 있었다. 생산에서이 오류는 요청 이후, 발생하지 않습니다 및 API는 동일한 도메인에 있어야합니다. 나는 그것이 도움이되기를 바랍니다!

    내 경우에는 내가 AWS (API 게이트웨이)에서 호스팅하는 API를 호출하고 있습니다. 나는 API 자신의 도메인이 아닌 다른 도메인에서 API를 호출하려고 할 때 오류가 발생했습니다. 내가 API 소유자이야 때문에 아마존 문서에 설명 된대로 나는, 테스트 환경에 대한 CORS 수 있었다. 생산에서이 오류는 요청 이후, 발생하지 않습니다 및 API는 동일한 도메인에 있어야합니다. 나는 그것이 도움이되기를 바랍니다!


  6. 6.@Dark 팔콘 응답, 나는 간단하게 처리.

    @Dark 팔콘 응답, 나는 간단하게 처리.

    내 경우, 나는 Node.js를 서버를 사용하고, 존재하지 않는 경우 세션을 생성하고있다. 옵션 방법은 그것에서 세션 정보를 가지고 있지 않기 때문에, 그것은 모든 POST 방식 요청에 대한 새 세션을 만드는 끝났다.

    세션-IF-하지 존재할를 만들 내 응용 프로그램 루틴 그래서, 난 그냥 방법은 옵션 인 경우 볼 수있는 검사를 추가, 그렇다면, 한 부분을 만들 세션을 건너 뛸 수 :

        app.use(function(req, res, next) {
            if (req.method !== "OPTIONS") {
                if (req.session && req.session.id) {
                     // Session exists
                     next();
                }else{
                     // Create session
                     next();
              }
            } else {
               // If request method is OPTIONS, just skip this part and move to the next method.
               next(); 
            }
        }
    

  7. 7."preflighted"요청이 처음으로 실제 요청을 전송하는 것이 안전 여부를 확인하기 위해, 다른 도메인에있는 리소스에 옵션의 방법으로 HTTP 요청을 보냅니다. 크로스 사이트 요청

    "preflighted"요청이 처음으로 실제 요청을 전송하는 것이 안전 여부를 확인하기 위해, 다른 도메인에있는 리소스에 옵션의 방법으로 HTTP 요청을 보냅니다. 크로스 사이트 요청

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS


  8. 8.Axios의 사용을 고려

    Axios의 사용을 고려

    axios.get( url,
    { headers: {"Content-Type": "application/json"} } ).then( res => {
    
      if(res.data.error) {
    
      } else { 
        doAnything( res.data )
      }
    
    }).catch(function (error) {
       doAnythingError(error)
    });
    

    나는 가져오고 Axios의 완벽하게 일을 사용하여이 문제를 가지고 있었다.


  9. 9.나는 매우 비슷한 문제가 발생했습니다. 나는 모든 파이어 폭스에서 제대로 작동하고 크롬에 ​​실패하는 이유를 이해하는 것은 거의 반나절을 보냈다. 의 내 요청 헤더 필드를 중복 (또는 어쩌면 잘못 입력) 때문에 내 경우에는 그것이 있었다.

    나는 매우 비슷한 문제가 발생했습니다. 나는 모든 파이어 폭스에서 제대로 작동하고 크롬에 ​​실패하는 이유를 이해하는 것은 거의 반나절을 보냈다. 의 내 요청 헤더 필드를 중복 (또는 어쩌면 잘못 입력) 때문에 내 경우에는 그것이 있었다.


  10. 10.사용는 요청도 prelighted되지 않습니다이 교차 domained의 대신 XHR의 가져 오기.

    사용는 요청도 prelighted되지 않습니다이 교차 domained의 대신 XHR의 가져 오기.


  11. 11.

     $.ajax({
                url: '###',
                contentType: 'text/plain; charset=utf-8',
                async: false,
                xhrFields: {
                    withCredentials: true,
                    crossDomain: true,
                    Authorization: "Bearer ...."
                },
    
                method: 'POST',
    
                data: JSON.stringify( request ),
                success: function (data) {
                    console.log(data);
                }
            });
    

    contentType의 '텍스트 / 일반; 문자셋 = UTF-8 ', 아니면 그냥 ContentType을'텍스트 '/ 일반, 나를 위해 작동! 문안 인사!!

  12. from https://stackoverflow.com/questions/21783079/ajax-in-chrome-sending-options-instead-of-get-post-put-delete by cc-by-sa and MIT license