带有 CORS 的 Cookie
Cookies with CORS
我在 AWS 上有一个前端 运行,在 Heroku 上有一个后端。因此,用户访问 AWS 上的登录页面,通过 Heroku 上的 API 发出登录请求,并且应该得到一个带有 session id 的 cookie。我已经阅读了所有关于 CORS 甚至 CORS + cookie 的内容,但仍然无法通过 CORS 成功设置 cookie(或者至少我当然无法验证我是否通过 Chrome 开发工具进行了设置,而且我的 Heroku 应用程序肯定无法读取任何请求 header cookie)。我正在使用 fastify
+ fastify-cors
+ fastify-cookie
在开发环境下运行时,我的前端是https://localhost:3000
而后端是https://localhost:80
当我登录时,我应该从 API @ localhost:80
取回一个 cookie。这是回复 headers(忽略内容长度,我为这个问题修剪了 session id)
HTTP/1.1 200 OK
vary: Origin
access-control-allow-origin: https://localhost:3000
access-control-allow-credentials: true
set-cookie: session_id=66f9c629644b890fefaa9b4c58a10666; Max-Age=31536000; HttpOnly; Secure; SameSite=None
content-type: application/json; charset=utf-8
content-length: 587
Date: Tue, 02 Feb 2021 05:18:38 GMT
Connection: keep-alive
Keep-Alive: timeout=5
我遵循了这个指南https://cors-errors.info/faq#cdc8
当我刷新页面时,我应该尝试通过 cookie 登录。但是我在 localhost:80
的 API 根本没有收到任何 cookie。这是通过 cookie 的登录请求的样子。不确定我是否应该看到正在发送的一些 cookie,但如果我应该看到,我认为它们永远不会保存到浏览器中。
POST /users/login/session HTTP/1.1
Host: localhost:80
Connection: keep-alive
Content-Length: 0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36
Accept: */*
Origin: https://localhost:3000
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://localhost:3000/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
不知道现在还能做什么...
我相信添加 path=/
并删除 domain
最终解决了所有问题。
我在 AWS 上有一个前端 运行,在 Heroku 上有一个后端。因此,用户访问 AWS 上的登录页面,通过 Heroku 上的 API 发出登录请求,并且应该得到一个带有 session id 的 cookie。我已经阅读了所有关于 CORS 甚至 CORS + cookie 的内容,但仍然无法通过 CORS 成功设置 cookie(或者至少我当然无法验证我是否通过 Chrome 开发工具进行了设置,而且我的 Heroku 应用程序肯定无法读取任何请求 header cookie)。我正在使用 fastify
+ fastify-cors
+ fastify-cookie
在开发环境下运行时,我的前端是https://localhost:3000
而后端是https://localhost:80
当我登录时,我应该从 API @ localhost:80
取回一个 cookie。这是回复 headers(忽略内容长度,我为这个问题修剪了 session id)
HTTP/1.1 200 OK
vary: Origin
access-control-allow-origin: https://localhost:3000
access-control-allow-credentials: true
set-cookie: session_id=66f9c629644b890fefaa9b4c58a10666; Max-Age=31536000; HttpOnly; Secure; SameSite=None
content-type: application/json; charset=utf-8
content-length: 587
Date: Tue, 02 Feb 2021 05:18:38 GMT
Connection: keep-alive
Keep-Alive: timeout=5
我遵循了这个指南https://cors-errors.info/faq#cdc8
当我刷新页面时,我应该尝试通过 cookie 登录。但是我在 localhost:80
的 API 根本没有收到任何 cookie。这是通过 cookie 的登录请求的样子。不确定我是否应该看到正在发送的一些 cookie,但如果我应该看到,我认为它们永远不会保存到浏览器中。
POST /users/login/session HTTP/1.1
Host: localhost:80
Connection: keep-alive
Content-Length: 0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36
Accept: */*
Origin: https://localhost:3000
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://localhost:3000/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
不知道现在还能做什么...
我相信添加 path=/
并删除 domain
最终解决了所有问题。