Javascript 即使CORS配置为允许访问,也不会发送Http cookie

Javascript 即使CORS配置为允许访问,也不会发送Http cookie,javascript,cors,Javascript,Cors,我有一个需要访问siteA和siteB的web应用程序(两者都由我管理)。在web应用程序与siteA对话(并从siteA获取cookie)并跳转到siteB后,它需要调用siteA,但http请求不包含任何cookie,即使我(通过cors)将siteA配置为信任siteB并允许凭据 我一直在Google上搜索和阅读SO和其他网站上的文档,但是,我就是无法在HTTP请求中发送cookie。下面是使用siteA进行API调用的javascript(在siteB上的页面中运行,浏览器为chrome

我有一个需要访问siteA和siteB的web应用程序(两者都由我管理)。在web应用程序与siteA对话(并从siteA获取cookie)并跳转到siteB后,它需要调用siteA,但http请求不包含任何cookie,即使我(通过cors)将siteA配置为信任siteB并允许凭据

我一直在Google上搜索和阅读SO和其他网站上的文档,但是,我就是无法在HTTP请求中发送cookie。下面是使用siteA进行API调用的javascript(在siteB上的页面中运行,浏览器为chrome)

下面是上述javascript发送的HTTP请求

GET /api/1/greeting HTTP/1.1
Host: siteA
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4117.2 Safari/537.36
Accept: */*
Origin: https://siteB
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
以下是答复:

HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: http://siteB
Access-Control-Allow-Credentials: true
Set-Cookie: jname=joe; HttpOnly
Content-Type: text/plain;charset=UTF-8
Content-Length: 27
Date: Sun, 26 Apr 2020 17:58:48 GMT
Keep-Alive: timeout=60
Connection: keep-alive
任何帮助或想法都将不胜感激

PS1:当我刷新siteA的网页时,我可以(从开发人员控制台)看到请求有cookie


PS2:尝试在javascript代码段中使用
凭据:“include'
,但也不起作用。

能否尝试将上面的代码更改为:

await(等待获取)http://siteA/api/1/greeting“,{credentials:'include'}”).text()


请参见此处:

尝试过,
include
没有任何区别:http请求仍然没有cookie。可能尝试
true
而不是include?使用
true
而不是
'include'
会出现错误,说明提供的值'true'不是RequestCredentials类型的有效枚举值。我将其标记为已接受,但仅在采用该值时才有效再加上@Lennholm的精彩回答!保留
credentials:'include'
在请求中按建议执行,但也可以尝试在响应的
Set Cookie
标题中设置
secure
sameSite=none
!你一针见血。要使其工作,siteA需要在HTTPS上,cookie需要像您所说的那样具有“SameSite=None;Secure”,并且应该具有“httpOnly”标志。它现在起作用了。我想给你和好人各一半的信用,但我不知道怎么做。你的客户托管在
https://siteB
,那么为什么在您的响应中将其设置为
访问控制允许原点:http://siteB
?检查MDN文档,架构也会影响同源策略
HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: http://siteB
Access-Control-Allow-Credentials: true
Set-Cookie: jname=joe; HttpOnly
Content-Type: text/plain;charset=UTF-8
Content-Length: 27
Date: Sun, 26 Apr 2020 17:58:48 GMT
Keep-Alive: timeout=60
Connection: keep-alive