我们有以下配置:第一个月
当您访问此域并创建购物篮时,我们会为购物篮值创建一个cookie。cookie domain
设置为.testing.parentdomain.com
,它是Httponly,路径为/
我们有一个子域名到上面的想访问的cookie。subdomain.testing.parentdomain.com
个
此子域对父域上的端点进行调用,例如:testing.parentdomain.com/basketData
。此调用是返回JSON的GET请求。
问题
问题是,在发出请求时,子域似乎没有发送cookie值,因此我们没有得到预期的响应。
尝试次数
看看其他问题,我们已经尝试了CORS和凭证更改。
作为补充说明,我们将下面的JS与webpack/babel捆绑在一起。
我们的请求来自 AJAX 如下:
$.ajax({
url: url,
type: 'GET',
xhrFields: {
withCredentials: true
},
crossDomain: true
})
字符串
服务器使用CORS为子域和allow-crendtials设置。在响应中,我们可以看到这些被返回。
access-control-allow-credentials:真的
access-control-allow-origin:子域名从上面
是否有任何原因导致cookie未随请求一起发送到父域?我们已经注销了服务器端响应上的cookie,它们并不像我们预期的那样存在。
请求头
:权威机构:testing.parentdomain.com
:方法:GET
:path:/basket/data/
:scheme:https
接受:/
accept-encoding:gzip,放气,br
accept-language:q= 0.9,en-US; q=0.8
来源:https://subdomain.testing.parentdomain.com
referer:https://subdomain.testing.parentdomain.com/
sec-fetch-dest:空的
sec-fetch-mode:科尔斯
sec-fetch-site:同址
用户代理:Mozilla/5.0(Macintosh; Intel Mac OS X 10_15_7)AppleWebKit/537.36(KHTML,like Gecko)Chrome/86.0.4240.111 Safari/537.36
响应头
access-control-allow-credentials:真的
访问控制允许方法:GET、PUT、POST、DELETE、HEAD、OPTIONS
access-control-allow-origin:https://subdomain.testing.parentdomain.com的
缓存控制:无缓存、无存储
内容长度:2238
内容类型:application/json;字符集=utf-8
日期:Tue,03 Nov 2020 20:39:36 GMT
过期:-1
杂注:无缓存
服务器:Microsoft-IIS/10.0
set-cookie:AWSALB=N0bcThdgRFzrSfQVNIsffgsvY6T/y2Bp47RZJCueeSLOS7eEjo0AThiElXmww6fy2eynRyyt8gAB8di/Mqy1x+Ds8Ig1TumKkWnQiFvIkoELI/rEYYgyUxbEtUI4; Expires=Tue,10 Nov 2020 20:39:36 GMT;路径=/
set-cookie:AWSALBCORS=N0bcThdgRFzrSfQVNIsffgsvY6T/y2Bp47RZJCueeSLOS7eEjo0AThiElXmww6fy2eynRyyt8gAB8di/Mqy1x+Ds8Ig1TumKkWnQiFvIkoELI/rEYYgyUxbEtUI4; Expires=Tue,10 Nov 2020 20:39:36 GMT; Path=/; SameSite=None;安全
状态:200
严格的运输安全:max-age=31536000;
vary:起源
x-content-type-options:诺斯尼夫
x-frame-options:山毛榉
x-robots-tag:无索引
x-ua兼容:IE=边缘
x-xss-protection:1;模式=块
2条答案
按热度按时间sulc1iza1#
即使您从子域调用主域,也会被视为跨域请求。
引用自RFC 6454,它限定了“起源”术语:
问:为什么使用完全限定的主机名而不是仅使用“top-
级”域?
答:虽然DNS有分层委托,但信任
主机名之间的关系因部署而异。例如,在许多教育机构,学生可以在
https://example.edu/~student/,但这并不意味着文档
由学生创作的作品应该是相同来源的一部分(即,
驻留在相同的保护域)作为用于管理在X1 E2 F1 X上托管的等级的web应用程序。
所以你所做的一切都是为了让它工作:
access-control-allow-origin: https://subdomain.testing.parentdomain.com
(不是通配符)withCredentials: true
在这种情况下,不需要
SameSite=None
cookie属性,因为从一个子域到同一域的另一个子域的请求被认为是“同一站点”(Source)。因此,只要检查一切都设置正确,它应该是工作。
qzlgjiam2#
在你的问题开始时,你说:
Cookie域设置为
.testing.parentdomain.com
但在记录的服务器响应中:
字符串
Domain=.testing.parentdomain.com;
参数明显缺失。我不知道您使用哪种编程语言来设置cookie,但我强烈建议您检查服务器响应中用于设置cookie的调用。