代码之家  ›  专栏  ›  技术社区  ›  zhuguowei

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

  •  0
  • zhuguowei  · 技术社区  · 7 年前

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

    127.0.0.1 my.foo.com
    

    同时,在页面中,他调用了后端api,该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不起作用?

    1 回复  |  直到 7 年前
        1
  •  1
  •   erik258    7 年前

    Cookie总是被捕获到特定域,并且永远不会发送到其他域中的服务器。

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

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

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