保存Ajax但不将CORS cookie从127.0.0.1发送到服务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保存Ajax但不将CORS cookie从127.0.0.1发送到服务相关的知识,希望对你有一定的参考价值。
所以我一直在向服务发送带有跨域请求的cookie时遇到问题。我已经让它在我们的CI环境中工作,但不是在本地。基本上,我在api.service.com
有一个API,它可以通过从webapp.service.com
的客户端运行的AJAX调用来访问。 API通过.service.com
为set-cookie
设置cookie。然后,对API的所有后续调用都应包含此cookie。当从webapp.service.com
运行时,这可以按预期工作。这将在prod工作正常。但是,出于显而易见的原因,我希望能够在本地开发webapp,并从本地文件或api.service.com
服务对localhost
运行API调用。
我知道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中显示如下:
我知道这实际上可以保存cookie。但是,也许不是我想要的。我进入Chrome的Cookie,它会正常更新,如下所示:
我看到的问题是它的“发送”值是“仅限同一站点连接”。我不知道如何最初设置Chrome以将其视为“任何类型的连接”。我认为这就是当我发送另一个AJAX调用时,该cookie未包含在请求中的原因。
我已经看到这样的其他帖子通过在AJAX调用中添加crossDomain
和/或withCredentials
来解决。这对我没有解决。这是对API的后续调用:
$.ajax({
url: 'https://api.service.com/getTheThing',
crossDomain: true,
xhrFields: {
withCredentials: true
},
success: function(data){...}
});
cookie不包含在此请求中,因此失败。
事实证明,设置SameSite=lax
正好与我的想法相反。删除它解决了这个问题。
以上是关于保存Ajax但不将CORS cookie从127.0.0.1发送到服务的主要内容,如果未能解决你的问题,请参考以下文章
我如何使用httplib2上传图像,但不将其保存到计算机上?