2016-06-27 18 views
0

私は実際にどのように問題を適切にフレーズするかわかりませんが、ここに私のシナリオがあります。私たちは、完全に動作する情報を得るために私たち自身の別個のサービス(サービスB)を呼び出すピクセルライブラリ(サービスA)を持っています。私たちはCORSの問題をこのヘッダでnginxで修正しました。ajaxリクエストでJavaScriptのレスポンスヘッダーからCookieを取得する方法を教えてください。

access-control-allow-credentials:true 
access-control-allow-headers:Authorization, Content-Type, If-None-Match 
access-control-allow-methods:GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS 
access-control-allow-origin:* 

私はこれらのレスポンスヘッダを取得http://service-bに行くことによって、ブラウザから直接サービスBを呼び出す場合。

access-control-allow-credentials:true 
access-control-allow-headers:Authorization, Content-Type, If-None-Match 
access-control-allow-methods:GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS 
access-control-allow-origin:* 
access-control-expose-headers:WWW-Authenticate, Server-Authorization 
access-control-max-age:86400 
cache-control:max-age=600 
Connection:keep-alive 
content-encoding:gzip 
Content-Length:56 
Content-Type:text/plain; charset=utf-8 
Date:Mon, 27 Jun 2016 17:36:22 GMT 
Expires:Mon, 27 Jun 2016 17:46:22 GMT 
set-cookie:name=value; Max-Age=14515200; Expires=Mon, 12 Dec 2016 17:36:22 GMT; Path=/ 

Chrome開発者ツールから、Cookieが正しく設定されていることがわかります。

しかし、私がこのような別のドメインからjQueryからサービスBを呼び出すと、

$.ajax({ 
    url: 'http://service-b/', 
    type: 'GET', 
    dataType: 'json', 
    xhrFields: { 
    withCredentials: true 
    } 
}); 

ここに私の回答があります。

access-control-allow-credentials:true 
access-control-allow-headers:Authorization, Content-Type, If-None-Match 
access-control-allow-methods:GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS 
access-control-allow-origin:http://web.local 
access-control-expose-headers:WWW-Authenticate, Server-Authorization 
access-control-max-age:86400 
cache-control:max-age=600 
Connection:keep-alive 
content-encoding:gzip 
Content-Length:56 
Content-Type:text/plain; charset=utf-8 
Date:Mon, 27 Jun 2016 17:29:02 GMT 
Expires:Mon, 27 Jun 2016 17:39:02 GMT 

私はset-cookieヘッダーが表示されず、クッキーが設定されていません。私はこれがCORSの問題であるかもしれないことに気がついたが、私たちは両方のサービスを内部的に制御しているのですでにCORSを広く開いている。私は何か不足していますか?そしてこの問題をどうやって解決するのですか?

答えて

0

CORSを開いても、異なるドメインのCookieはドメイン全体で直接使用できなくなります。クッキーは常にドメイン固有であり、あなたが言ったように、あなたは別のドメインからサービスを呼び出しているので、クッキーはこのように利用できません。クッキー値の代わりに応答ヘッダーを設定できます。

+0

これを回避する唯一の方法は、レスポンスヘッダーからクッキーを取得し、それを私のサービスから設定することです。 – toy

+0

POSTデータもそれに使用できます。 –

関連する問題