我不确定如何恰当地说出问题,但这是我的情景。我们有一个像素库(服务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,因为我们在内部控制两个服务。我错过了什么吗?我该如何解决这个问题?
答案 0 :(得分:0)
即使您打开了CORS,来自不同域的Cookie也不会直接在域中提供。 Cookie总是特定于域名,正如您所说,您从不同的域名调用该服务,Cookie将无法像这样提供。您可以设置响应标头而不是cookie值。