当发送跨域请求仍然不起作用时,为什么要明确地告诉ajax携带cookie?

当发送跨域请求仍然不起作用时,为什么要明确地告诉ajax携带cookie?,ajax,cookies,cross-domain,Ajax,Cookies,Cross Domain,我的前端同事访问他的本地应用程序,并为其设置主机 127.0.0.1 my.foo.com 同时,在页面中,他调用了后端api,在我的机器中,它是通过ajax实现的 $.ajax({ type: "post", url: 'http://192.168.0.204:8080/bar/search', contentType : "application/json;charset=utf-8", dataType: "json", ... 因为一个是my

我的前端同事访问他的本地应用程序,并为其设置主机

127.0.0.1 my.foo.com
同时,在页面中,他调用了后端api,在我的机器中,它是通过ajax实现的

$.ajax({
    type: "post",
    url: 'http://192.168.0.204:8080/bar/search',
    contentType : "application/json;charset=utf-8",
    dataType: "json",
    ...
因为一个是
my.foo.com
,另一个是
192.169.0.204:8080
,所以在这种情况下后端无法接收cookie,因为它是跨域的。所以需要明确告诉ajax请求在请求头中携带cookie,同时服务器也需要在响应头中进行一些配置,见下文

client:  xhrFields: { withCredentials: true }
server: 
- Access-Control-Allow-Credentials:true
- Access-Control-Allow-Origin: http://my.foo.com/

然后我发现服务器仍然无法接收cookie。我想知道为什么显式地告诉ajax携带cookie不起作用?

cookie总是被舀到特定的域中,并且从不发送到其他域中的服务器

“允许起源”不会改变这一事实。它只是通知浏览器允许命名主机上的脚本访问主机。这并不意味着cookies是共享的,正如你所看到的,它们不是

您最简单的解决方案是将两个站点放在一个域下,并将cookie范围限定到共享域。他们两个网站都可以阅读。不管怎么说,你都在编造名字,为什么不说出双方的名字呢

还有其他跨域共享数据的技术,但它们都涉及到以cookie以外的其他方式发送数据