development

교차 도메인 POST 요청이 쿠키 Ajax Jquery를 보내지 않습니다.

big-blog 2020. 12. 12. 12:10
반응형

교차 도메인 POST 요청이 쿠키 Ajax Jquery를 보내지 않습니다.


비슷한 것이 이미 stackoverflow에서 논의 된 것처럼 보이지만 정확히 똑같은 것을 찾을 수는 없습니다.

CORS (Cross-origin resource sharing)로 쿠키를 보내려고하는데 작동하지 않습니다.

이것은 내 코드입니다.

$.ajax(
    { 
      type: "POST",
      url: "http://example.com/api/getlist.json",
      dataType: 'json',
      xhrFields: {
           withCredentials: true
      },
      crossDomain: true,
      beforeSend: function(xhr) {
            xhr.setRequestHeader("Cookie", "session=xxxyyyzzz");
      },
      success: function(){
           alert('success');
      },
      error: function (xhr) {
             alert(xhr.responseText);
      }
    }
);

요청 HEADER에이 쿠키가 표시되지 않습니다.


JavaScript를 통해 CORS 요청에 대해 쿠키를 설정하거나 읽을 수 없습니다. CORS는 교차 출처 요청을 허용하지만 쿠키는 여전히 브라우저의 동일 출처 정책의 적용을받습니다. 즉, 동일한 출처의 페이지 만 쿠키를 읽고 쓸 수 있습니다. withCredentials단지 원격 호스트에서 설정 한 쿠키가 해당 원격 호스트로 전송된다는 것을 의미합니다. Set-Cookie헤더 를 사용하여 원격 서버에서 쿠키를 설정해야합니다 .


일반적으로 이것은 나쁜 습관이기 때문에 이것은 쿠키 공유 프로세스를 해결하지 못합니다.

유형으로 JSONP를 사용해야합니다.

$ .ajax 문서에서 : 교차 도메인 요청 및 dataType : "jsonp"요청은 동기 작업을 지원하지 않습니다.

$.ajax(
    { 
      type: "POST",
      url: "http://example.com/api/getlist.json",
      dataType: 'jsonp',
      xhrFields: {
           withCredentials: true
      },
      crossDomain: true,
      beforeSend: function(xhr) {
            xhr.setRequestHeader("Cookie", "session=xxxyyyzzz");
      },
      success: function(){
           alert('success');
      },
      error: function (xhr) {
             alert(xhr.responseText);
      }
    }
);

나는 이와 같은 문제가 있었다. 세션 ID는 쿠키로 전송되지만 요청이 도메인 간이므로 브라우저의 보안 설정으로 인해 쿠키가 전송되지 않습니다.

솔루션 : 클라이언트 (브라우저에서)에서 세션 ID를 생성하고 Javascript sessionStorage를 사용하여 세션 ID를 저장 한 다음 각 요청과 함께 세션 ID를 서버에 보냅니다.

나는이 문제로 많은 어려움을 겪었고 주변에 좋은 답변이 많지 않았습니다. 다음은 솔루션을 자세히 설명하는 기사입니다. Javascript Cross-Domain Request With Session

참고URL : https://stackoverflow.com/questions/14462423/cross-domain-post-request-is-not-sending-cookie-ajax-jquery

반응형