교차 도메인 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
'development' 카테고리의 다른 글
iOS에서 애니메이션으로 탭 막대를 숨기는 방법은 무엇입니까? (0) | 2020.12.13 |
---|---|
UI를 차단하지 않고 배열을 반복하는 가장 좋은 방법 (0) | 2020.12.12 |
이모티콘 (이모티콘)보기 / 키보드 레이아웃 구현 (0) | 2020.12.12 |
C ++에서 빠른 텍스트 파일 읽기 (0) | 2020.12.12 |
실제 Apple Watch에서 디버그 : 응용 프로그램 확인 실패 (0) | 2020.12.12 |