Javascript 未在跨域上使用fetch设置CORS Cookie,设置凭据:“包括”和来源已设置

Javascript 未在跨域上使用fetch设置CORS Cookie,设置凭据:“包括”和来源已设置,javascript,flask,cors,cross-domain,fetch,Javascript,Flask,Cors,Cross Domain,Fetch,我正在使用fetch向后端发出请求。 当我使用其他域时,未设置cookie。 cookie是在我使用同一个域时设置的 为什么没有设置 我修改了我的/etc/hosts文件,使用假名来测试相同和不同的域,并确保它们都是 如果我在浏览器和服务器域中都使用local-test-frontend.com,它会工作,但是如果我将后端url更改为local-test-backend.com,它会失败 *请注意,我测试它的前端url是*http://local-test-frontend.com:3000/l

我正在使用fetch向后端发出请求。 当我使用其他域时,未设置cookie。 cookie是在我使用同一个域时设置的

为什么没有设置

我修改了我的/etc/hosts文件,使用假名来测试相同和不同的域,并确保它们都是

如果我在浏览器和服务器域中都使用local-test-frontend.com,它会工作,但是如果我将后端url更改为local-test-backend.com,它会失败

*请注意,我测试它的前端url是*http://local-test-frontend.com:3000/login

Javascript

    fetch('http://local-test-backend.com/login',  {
        mode: 'cors',
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(loginRequest),
        credentials: 'include'
    }).then(// Other code here.....
服务器响应头

Access-Control-Allow-Credentials    
true
Access-Control-Allow-Origin 
http://local-test-frontend.com:3000
Content-Length  
103
Content-Type    
application/json
Date    
Wed, 10 Jul 2019 07:23:49 GMT
Server  
Werkzeug/0.15.1 Python/3.7.3
Set-Cookie  
MY_TOKEN=a7b8ad50f19…end.com; Path=/; SameSite=Lax
我只是试图通过调用另一个域上的服务器来获取当前域的cookie集

你不能,至少不能直接。Cookie属于设置它们的源


最接近的方法是让不同的域以非Cookie格式返回数据,如响应主体,然后使用客户端JS存储数据。

从2021年开始,在Linux上使用Edge 90.0.796.0,我使用以下方法设置CORS Cookie:

客户端使用凭据“include”异步初始化获取请求。有关更多详细信息,请参阅。 要执行CORS,服务器响应头必须包含显式设置为域的Access Control Allow Origin,该域可能不同于服务器域。例如,在单页应用程序体系结构中,前端站点临时托管在localhost:3000,后端服务器托管在localhost:8000,则标题应为Access Control Allow Origin:http://localhost:3000. 见和。 为了允许客户端处理cookie(这显然是一种敏感资源),服务器响应头必须进一步包含访问控制允许凭据:true。看见请注意,这将强制执行访问控制允许原点的非通配符设置。请参阅-这就是为什么在上面的第2点中,它必须显式设置为http://localhost:3000 而不是* 当服务器设置cookie时,它必须包含SameSite=None;保护HttpOnly。总的来说,比如设置Cookie:session_id=12345;SameSite=无;保护HttpOnly。SameSite似乎是最新浏览器中的一个相对安全的选项,当SameSite设置为None时,必须与Secure一起使用。 关于HttpOnly,我还没有找到相关的资料,但在我的实验中,忽略它会导致浏览器忽略Set Cookie头。 对后端服务器的进一步请求还必须设置凭据:“包括”。
你能把问题说清楚吗?我看不出这里有什么问题?通过在地址栏中键入URL,您可以从源X请求一个HTML文档。这将在响应B中提供一个HTML文档。然后使用JavaScript向另一个源Y发出请求C,该请求将得到一个响应D。其中哪些包括Set Cookie标头?我想是D,但我想确定一下。然后如何确定尚未设置cookie?你有其他要求吗?到哪个来源?您不能跨域共享cookiethough@zakir刚刚添加了为什么不设置?向质询委员会提出质询。在很大程度上,当向服务器发送一个与浏览器域不同的请求时,cookie不会被浏览器设置browser@hackerl33t我并没有试图跨域共享cookie,我只是试图通过调用不同域上的服务器来获取当前域的cookie集。不确定该链接/答案是否适用?如果我的服务器在域服务器上,而前端在域前端上,那么前端不可能保存服务器自动发送的cookie?@tt_Gantz-正确。同事们,对不起。。。但是,我看到响应后的另一个域设置了cookie,这样可以吗?远程服务器跨源请求回复并设置PHPSSID和其他coolies!!!这对我帮助很大。使用膝关节炎和结节。我就是这么做的。cookies.set'SomeKey',token,{sameSite:'none',secure:true,httpOnly:true};