programing

HTTPS를 통한 HTTP 쿠키 및 Ajax 요청

goodcopy 2023. 3. 29. 23:31
반응형

HTTPS를 통한 HTTP 쿠키 및 Ajax 요청

이전에도 여러 가지 형태로 물어봤지만, 저는 이 문제를 피할 수 없을 것 같습니다.jQuery와 네이티브 JS API를 모두 사용하여 Ajax 요청을 만들어 보았습니다.

현재 상황은 다음과 같습니다(첨부도 참조).

  1. 브라우저가 HTTP 요청을 작성하다
  2. 서버가 응답하여 영속적인 Cookie를 설정합니다.
  3. 브라우저가 HTTP Ajax를 요청하고 Cookie가 올바르게 있습니다.
  4. 서버가 예상대로 응답하여 Cookie를 업데이트합니다.
  5. 브라우저가 HTTPS Ajax 요청을 생성했지만 Cookie는 더 이상 존재하지 않습니다(?)
  6. 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

반응형