我们有以下配置: testing.parentdomain.com
当您访问此域并创建购物篮时,我们将为该购物篮值创建一个cookie。Cookie域设置为.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
})
服务器已为子域和allow-crendtials设置了CORS。在响应中,我们可以看到这些已返回。
access-control-allow-credentials:真正的
access-control-allow-origins:上面的子域
是否有任何原因未将Cookie与请求一起发送到父域?我们已经在服务器端响应中注销了cookie,但是它们不像我们期望的那样存在。
:authority:testing.parentdomain.com
:方法:GET
:path:/ basket / data /
:scheme:https
accept:/
accept-encoding:gzip,deflate,br
accept语言:en-GB,en; q = 0.9, zh-cn; q = 0.8
来源:https://subdomain.testing.parentdomain.com引荐来源网址
:https://subdomain.testing.parentdomain.com/
sec-fetch-dest:空的
sec-fetch-mode:cors
sec-提取站点:同站点
用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_15_7)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 86.0.4240.111 Safari / 537.36
access-control-allow-credentials:true
访问控制-允许方法:GET,PUT,POST,DELETE,HEAD,OPTIONS
access-control-allow-origin:https : //subdomain.testing.parentdomain.com
缓存控制:无缓存,无存储
content-length:2238
content-type:application / json; 字符集= UTF-8
日期:星期二,2020年11月3日20时39分36秒GMT
到期:-1
杂注:无缓存
服务器:Microsoft-IIS / 10.0
的Set-Cookie:AWSALB = N0bcThdgRFzrSfQVNIsffgsvY6T / y2Bp47RZJCueeSLOS7eEjo0AThiElXmww6fy2eynRyyt8gAB8di / Mqy1x + Ds8Ig1TumKkWnQiFvIkoELI / rEYYgyUxbEtUI4; Expires = Tue,2020年11月10日20:39:36 GMT; 路径= /
set-cookie:AWSALBCORS = N0bcThdgRFzrSfQVNIsffgsvY6T / y2Bp47RZJCueeSLOS7eEjo0AThiElXmww6fy2eynRyyt8gAB8di / Mqy1x + Ds8Ig1TumKkWNQiFYELY Expires = Tue,10 Nov 2020 20:39:36 GMT; 路径= /; SameSite = None; 安全
状态:200
严格传输安全性:max-age = 31536000;
变化:原始
x内容类型选项:nosniff
x框架选项:SAMEORIGIN
x机器人标签:noindex
x ua兼容:IE =边缘
x-xss保护:1;模式=阻止
即使您从子域调用主域,这也被视为跨域请求。
从报价RFC 6454,其资格的“原产地”一词:
问:为什么要使用标准主机名而不是仅使用“顶级
”域?答:尽管DNS具有分层委派,但
主机名之间的信任关系会因部署而异。例如,在许多教育机构中,学生可以在
https://example.edu/~student/上托管内容,但这并不意味着
学生创作的文档应属于同一出身(即,享有
相同的保护)域)作为Web应用程序,用于管理托管在https://grades.example.edu/上的成绩。
因此,确实需要您所做的所有事情才能使其正常工作:
access-control-allow-credentials: true
access-control-allow-origin: subdomain.testing.parentdomain.com
(不是通配符)withCredentials: true
在请求中声明Cookie时,您只剩下两件事:Secure
和SameSite=None
。
该SameSite=None
属性是跨站点请求所必需的,除非Secure
也已设置,否则它将不起作用。
显然,该Secure
属性暗示testing.parentdomain.com
通过HTTPS提供服务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句