私は実際にどのように問題を適切にフレーズするかわかりませんが、ここに私のシナリオがあります。私たちは、完全に動作する情報を得るために私たち自身の別個のサービス(サービス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を広く開いている。私は何か不足していますか?そしてこの問題をどうやって解決するのですか?
これを回避する唯一の方法は、レスポンスヘッダーからクッキーを取得し、それを私のサービスから設定することです。 – toy
POSTデータもそれに使用できます。 –