javascript - 即使 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 片段中使用,它也不起作用。
解决方案
您可以尝试将上面的代码更改为:
await (await fetch("http://siteA/api/1/greeting", {credentials: 'include'})).text()
推荐阅读
- laravel-5.8 - Laravel 重定向到带有参数问题的路由
- python - Numpy 向量化
- debugging - 创建 gdb 服务器的文档
- reactjs - 在 reactjs 的 map 中使用 api 动作
- python - 我正在绘制 RLC 电路的输出电压,但我不确定如何输入公式
- c# - Unity - 将对象添加到通用列表时类型不匹配
- python - 使用 Python 3.7 导入 pyobjc AppKit 时如何消除不需要的调试输出
- node.js - 如何将多页 Web 应用程序连接到 graphql?
- stripe-payments - stripe.createToken() 不是函数
- javascript - 如何从 responseText 属性中提取数值?