保存Ajax但不将CORS cookie从127.0.0.1发送到服务

时间:2017-12-18 22:41:40

标签: ajax cookies cors

因此,我在向服务发送带有跨域请求的Cookie时遇到问题。我已经让它在我们的CI环境中工作,但不是在本地。基本上,我在api.service.com有一个API,它可以通过AJAX调用从webapp.service.com的客户端访问。 API通过.service.comset-cookie设置了Cookie。然后,对API的所有后续调用都应包含此cookie。从webapp.service.com运行时,这可以按预期工作。这将在prod工作正常。 然而,出于显而易见的原因,我希望能够在本地开发webapp,并从本地文件或api.service.com服务对localhost运行API调用。< / p>

据我所知,Chrome在保存本地文件的Cookie方面有点不确定,但我已经解决了这个问题,并不是问题所在。实际上,cookie是节省的。它只是不发送带有后续API调用的cookie。这是我正在进行的工作流程(带有一些通用/审查的产品名称):

AJAX调用POSTS到我们的API:

$.ajax({
  method: "POST",
  crossDomain: true,
  xhrFields: {
    withCredentials: true,
  },
  url: 'https://api.service.com/login',
  data: data,
  contentType:"text/plain",
  dataType: "json",
  success: function(data){
    ...
  }
});

CORS内容设置为允许凭据和来源(允许的来源动态更新,不使用*。所以我们收回此cookie:cookie:service-token=7f7d251ebeec37f7c0815....; SameSite=lax;Max-Age=2629744; domain=.service.com; path=/;

它在Chrome中显示如下:

Request cookie

我知道这实际上可以保存cookie。但是,也许不是我想要的。我进入了Chrome的Cookie,它正常更新,如下所示:

Chrome saved cookie

我看到的问题是&#34;发送给&#34;值是&#34;仅限同一站点连接&#34;。我不知道如何最初设置Chrome以将其视为&#34;任何类型的连接。&#34;我认为这就是当我发送另一个AJAX调用时,该cookie未包含在请求中的原因。

我已经看到其他类似帖子通过向AJAX调用添加crossDomain和/或withCredentials来解决。这对我没有解决。这是对API的后续调用:

$.ajax({
  url: 'https://api.service.com/getTheThing',
  crossDomain: true,
  xhrFields: {
    withCredentials: true
  },
  success: function(data){...}
});

此请求中不包含cookie,因此失败。

1 个答案:

答案 0 :(得分:1)

事实证明,设置SameSite=lax正好与我的想法相反。删除它解决了这个问题。