微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从子域发送带有请求的Cookie 请求标头响应标题

如何解决从子域发送带有请求的Cookie 请求标头响应标题

我们有以下配置: 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:true
access-control-allow-origin:上方的子域

是否有任何原因未将Cookie与请求一起发送到父域?我们已经在服务器端响应中注销了cookie,但是它们不像我们期望的那样存在。

请求标头

:权威:testing.parentdomain.com
:method:GET
:path:/ basket / data /
:方案:https
接受: /
accept-encoding:gzip,deflate,br
接受语言:en-GB,en; q = 0.9,en-US; q = 0.8
来源:https://subdomain.testing.parentdomain.com
推荐人:https://subdomain.testing.parentdomain.com/
sec-fetch-dest:空
sec-fetch-mode:cors
sec-fetch-site:相同站点
用户代理: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
缓存控制:无缓存,无存储
内容长度:2238
内容类型:application / json; charset = utf-8
日期:星期二,2020年11月3日20:39:36 GMT
到期:-1
语法:无缓存
伺服器:Microsoft-IIS / 10.0
set-cookie:AWSALB = N0bcThdgRFzrSfQVNIsffgsvY6T / y2Bp47RZJCueeSLOS7eEjo0AThiElXmww6fy2eynRyyt8gAB8di / Mqy1x + Ds8Ig1TumKkWnQiFyIELIy Expires = Tue,10 Nov 2020 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-content-type-options:nosniff
x-frame-options:SAMEORIGIN
x-robots-tag:noindex
x-ua兼容:IE = edge
x-xss-保护:1;模式=阻止

解决方法

即使您是从子域调用主域,这也被视为跨域请求。

引用RFC 6454的行文,该行文限定“来源”一词:

问:为什么要使用标准主机名而不是仅使用“ top-
级”域?

A:尽管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时,您只缺少两件事:SecureSameSite=None

对于跨站点请求,必须要求SameSite=None属性,除非也设置了Secure,否则该属性将不起作用。

显然,Secure属性意味着testing.parentdomain.com是通过HTTPS提供的。

,

在您开始提问时,您说过:

cookie域设置为.testing.parentdomain.com

但在已记录的服务器响应中:

set-cookie: AWSALBCORS=N0bcThdgRFzrSfQVNIsffgsvY6T/y2Bp47RZJCueeSLOS7eEjo0AThiElXmww6fy2eynRyyt8gAB8di/Mqy1x+Ds8Ig1TumKkWnQiFvIkoELI/rEYYgyUxbEtUI4; Expires=Tue,10 Nov 2020 20:39:36 GMT; Path=/; SameSite=None; Secure

显然Domain=.testing.parentdomain.com;参数缺失。

我不知道您使用哪种编程语言来设置cookie,但是我强烈建议您在服务器响应中检查用于设置cookie的调用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。