programing

$http 요구는 각진 CORS에서 도메인 간 쿠키를 전송하지 않습니다.

lastmoon 2023. 3. 23. 23:04
반응형

$http 요구는 각진 CORS에서 도메인 간 쿠키를 전송하지 않습니다.

우선 Stack의 질문이나 CORS에 관한 질문은 모두 읽었지만 아직 실장이 되지 않았습니다.내 APP는 각진 크러드 데모 에 구축되어 있다.

앱 구성에 다음과 같은 내용이 있습니다.

$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

(디버깅으로) 올바르게 설정되어 있는 것을 알고 있습니다.내 "보안" 앱에서 현재 사용자(크로스 도메인):

return $http.get(LAYOUT_CONFIG.baseURL + '/current-user').then(function(response) {
      //service.currentUser = response.data.user;
      service.currentUser = response.data;
      return service.currentUser;
    });

첫 번째 요청으로 다음 헤더를 받습니다.

    Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:accept, origin, content-type, cookie
Access-Control-Allow-Methods:GET,POST
Access-Control-Allow-Origin:http://admin.vibetrace.com
Access-Control-Max-Age:1728000
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Sun, 02 Jun 2013 11:07:49 GMT
P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
Server:nginx/1.1.19
Set-Cookie:vibetrace.ssid=s%3A2lT2_N0-EevCJt7LbRlJ6Az1.d8xp99st%2F0RNV0VN2D4o4AJXNRT%2F%2F46v8PDVWSAbx%2Fw; Path=/; Expires=Mon, 30 Sep 2013 11:07:49 GMT
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Cache:MISS
X-Powered-By:Express

세트쿠키는 거기 있구나.단, 그 후의 $http.get request (from angular)는 이전에 설정했어야 할 쿠키를 전송하지 않습니다.

Accept:application/json, text/plain, */*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:app.vibetrace.com
Origin:http://admin.vibetrace.com
Pragma:no-cache
Referer:http://admin.vibetrace.com/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36

여기서 흥미로운 부분이 나옵니다.콘솔에서 다음 코드를 실행하는 경우:

$.ajax("https://app.vibetrace.com/current-user", {
            type: "GET",
            success: function(data, status, xhr) {               
            },
            xhrFields: {
                withCredentials: true
            },
            crossDomain: true
        });

요청 헤더에 쿠키가 포함되어 있습니다.

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Cookie:fbm_245656478789760=base_domain=.vibetrace.com; __utma=199448574.828439508.1336934706.1361539088.1361819816.356; __utmc=199448574; __utmz=199448574.1361819816.356.354.utmcsr=tenlister.com|utmccn=(referral)|utmcmd=referral|utmcct=/index.php; connect.sid=s%3AZ1o9bIw0jBOmQwuhKJDG1San.%2BfshIsvupiRuK0pUJqm8EAMnMBCyxf%2Fk17cAVzcy31w; __utma=173003172.1796845739.1355503443.1369827921.1369833348.68; __utmc=173003172; __utmz=173003172.1369410587.66.5.utmcsr=stage.marketizator.com|utmccn=(referral)|utmcmd=referral|utmcct=/app/builder/; vibetrace.ssid=s%3AV6biojefu9r5DTGErKL5vYPi.KAlnWMUm8jZmPV0MpP%2FrgqwmkF6WuXEZZDyzJhozYCs
Host:app.vibetrace.com
Origin:http://admin.vibetrace.com
Pragma:no-cache
Referer:http://admin.vibetrace.com/

내가 뭘 놓쳤지?

당신은 이것을 보았습니까?각도 간 통신JS 및 Jersey Webservice가 다른 도메인에 있습니다. 올바른 세션에 액세스할 수 없습니다.

config 오브젝트를 credentials로 지정하는 $http로 전달해 보겠습니다.이것은 모든 버전에서 동작합니다.

$http({withCredentials: true, ...}).get(...)

여기에서는, https://github.com/angular/angular.js/pull/1209 를 참조해 주세요.

설정withCredentials=true효과가 있을 것입니다.특히 $190으로 동작하는 부분은 짜증납니다.그 결과, 문제가 클라이언트에 있는 것이 아니라, 서버가 반환하는 내용과 테스트 방법의 조합에 있다고 생각할 수 있습니다.

jQuery와 Angular를 모두 사용하여 동일한 경로에서 테스트하시겠습니까?

이 문제는 서버에서 가져온 쿠키와 관련이 있을 수 있습니다.경로가 올바르게 설정되어 있지 않으면 브라우저는 요청과 함께 쿠키를 다른 경로로 보내지 않습니다.이는 다른 속성에도 해당되지만 경로가 가장 유력합니다.

이는 Angular 구성과는 무관하지만 몇 시간 정도 지연될 수 있습니다.

그 외에는 Angular의 이전 버전을 사용하고 있다는 설명뿐이지만, 질문의 세부사항과 제가 보기엔 어려울 것 같은 다른 답변과의 링크를 볼 수 있습니다.

두 개의 다른 하위 도메인이 보입니다.

  • admin.vibetrace.com
  • app.vibetrace.com

기본 도메인에 대한 쿠키를 명시적으로 설정해 보십시오.

Set-Cookie:vibetrace.ssid=...; Domain=.vibetrace.com; Path=/; Expires=...

레퍼런스:Wikipedia: HTTP 쿠키 - 도메인 및 경로

언급URL : https://stackoverflow.com/questions/16882245/http-request-doesnt-send-cookies-cross-domain-in-angular-cors

반응형