如何让ajax请求在JavaScript中设置来自响应头的cookie?

时间:2016-06-27 17:54:40

标签: javascript jquery cookies nginx

我不确定如何恰当地说出问题,但这是我的情景。我们有一个像素库(服务A),它调用我们自己的独立服务(服务B)来获得一条完美的信息。我们用这个头修复了nginx的CORS问题。

cellForRowAtIndexPath:

如果我直接从浏览器呼叫服务B,请转到http://service-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:*

我可以从Chrome开发者工具中看到Cookie设置正确。

但是,如果我从这样的不同域调用jQuery中的服务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=/

这是我得到的回应。

 $.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 标题,也没有设置Cookie。我意识到这可能是CORS问题,但我们已经开放CORS,因为我们在内部控制两个服务。我错过了什么吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

即使您打开了CORS,来自不同域的Cookie也不会直接在域中提供。 Cookie总是特定于域名,正如您所说,您从不同的域名调用该服务,Cookie将无法像这样提供。您可以设置响应标头而不是cookie值。