首页 > 解决方案 > 即使 CORS 配置为允许访问,也未发送 Http cookie

问题描述

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

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

await (await fetch("http://siteA/api/1/greeting", {credentials: 'same-origin'})).text()
"Greetings from Spring Boot!"

这是上面的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:尝试credentials: 'include'在 javascript 片段中使用,它也不起作用。

标签: javascriptcors

解决方案


您可以尝试将上面的代码更改为:

await (await fetch("http://siteA/api/1/greeting", {credentials: 'include'})).text()

见这里:https ://javascript.info/fetch-crossorigin


推荐阅读