반응형
HTTPS를 통한 HTTP 쿠키 및 Ajax 요청
이전에도 여러 가지 형태로 물어봤지만, 저는 이 문제를 피할 수 없을 것 같습니다.jQuery와 네이티브 JS API를 모두 사용하여 Ajax 요청을 만들어 보았습니다.
현재 상황은 다음과 같습니다(첨부도 참조).
- 브라우저가 HTTP 요청을 작성하다
- 서버가 응답하여 영속적인 Cookie를 설정합니다.
- 브라우저가 HTTP Ajax를 요청하고 Cookie가 올바르게 있습니다.
- 서버가 예상대로 응답하여 Cookie를 업데이트합니다.
- 브라우저가 HTTPS Ajax 요청을 생성했지만 Cookie는 더 이상 존재하지 않습니다(?)
- Cookie가 없으므로 서버가 "기본" 응답을 제공합니다(의도하지 않은 동작).
교차 도메인 요청에 대한 강의를 시작하기 전에 몇 가지 사항을 말씀드리겠습니다.
- 이것이 크로스 도메인 요구(다른 프로토콜)라는 것을 알고 있기 때문에, 서버에서는 이러한 요구를 설정합니다.
Access-Control-Allow-Origin
응답의 헤더(COMS를 지원하는 Chrome 및 Firefox를 사용하고 있습니다) - 또, 호스트가 같기 때문에, HTTP cookie 는 HTTPS 를 개입시켜 관리할 수 있을 필요가 있는 것도 알고 있습니다(여기 참조).
- (EDIT) cookie가 일반 도메인(.domain.ext 등)에 대해 올바르게 설정되어 있으며 HttpOnly 플래그도 Secure 플래그도 설정되어 있지 않습니다.
그럼 왜 브라우저가 HTTPS Ajax 콜을 발신할 때 쿠키를 전달하지 않는 걸까요?좋은 생각 있어요?난 미쳐버릴 것 같아...
+-----------+ HTTP Request +-----------+
|Browser |+---------------->|Server |
+-----------+ +-----------+
HTTP Response
<----------------+
Set-cookie
Ajax HTTP Req.
+---------------->
Cookie (OK)
HTTP Response
<----------------+
Set-cookie (OK)
Ajax HTTPS Req.
+---------------->
No Cookie (!!!)
좋아, 쿠키 문제에 대한 해결책을 찾았어.
XHR 사양, jQuery 문서 및 StackOverflow를 참조하십시오.
프로토콜 및/또는 하위 도메인을 전환할 때 쿠키가 전송되도록 하려면withCredentials
의 재산.true
.
예: (jQuery 사용)
$.ajax( {
/* Setup the call */
xhrFields: {
withCredentials: true
}
});
Document.cookie와 Ajax Request는 쿠키를 공유하지 않습니다.그렇지 않으면 ajax는 document.cookie 또는 응답 헤더에서 쿠키에 액세스할 수 없습니다.리모트 도메인에서만 제어할 수 있습니다.
먼저 서버에서 ajax에 의해 cookie를 포함한 응답을 받으면 cookie와의 통신을 서버에 요청할 수 있습니다.
이 경우 아래 코드(jQuery)와 같이 씁니다.
$.ajax({
xhrFields : {
withCredentials : true
}
});
언급URL : https://stackoverflow.com/questions/10230341/http-cookies-and-ajax-requests-over-https
반응형
'programing' 카테고리의 다른 글
WooCommerce의 국가 코드에서 국가 이름을 가져오는 중 (0) | 2023.03.29 |
---|---|
WordPress Gutenberg 블록:페이지 수준 블록을 제한하지만 모든 하위 수준 블록을 허용하는 방법 (0) | 2023.03.29 |
wp_enqueue_script()와 wp_register_script()의 차이점은 무엇입니까? (0) | 2023.03.29 |
mongo group 쿼리 필드 유지 방법 (0) | 2023.03.29 |
Jasmine에서 jQuery AJAX 이벤트를 확인하려면 어떻게 해야 합니까? (0) | 2023.03.29 |