Javascript 可以访问从另一个域创建的 cookie 吗?
请阅读整个问题,因为我确信它涵盖了基本建议。
我的项目配置设置如下:
域:
front-end: "https://front.domainA.com" // AWS Amplify, React
back-end: "https://back.domainB.com" // AWS Amplify, Express.js
CORS(在 server.js 上):
origin: "https://front.domainA.com",
credentials: true,
optionsSuccessStatus: 200,
CORS(放大 API 控制台,在server.js CORS之前点击它):
"method.response.header.Access-Control-Allow-Methods": "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'",
"method.response.header.Access-Control-Allow-Headers": "'X-Requested-With,X-HTTP-Method-Override,Accept,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,csrf-token,x-csrf-token,xsrf-token,x-xsrf-token'",
"method.response.header.Access-Control-Allow-Origin": "'https://front.domainA.com'",
"method.response.header.Access-Control-Expose-Headers": "'Set-Cookie'",
"method.response.header.Access-Control-Allow-Credentials": "'true'"
爱讯
const instance = axios.create({
baseURL: "https://back.domainB.com";
});
instance.interceptors.request.use((req) => {
req.withCredentials = true;
return req;
});
export default instance;
请注意,我已经测试了跨 localhost 端口(前端:3000,后端:5000)共享 cookie,没有任何问题。
更多详细信息:
当调用我的 cookie GET 端点时,cookie 将在“Set-Cookie”响应标头中发送回前端。但是从那里我无法让 Javascript 读取 cookie,然后我想在前端对其进行操作。
在您推荐设置 cookie 属性之前,我已经涵盖了各个方面。我已经在每个可能的配置中设置了 cookie 的域、sameSite、httpOnly、安全和路径属性,但没有结果。也就是说,该示例的正确设置似乎是:
httpOnly=false
path="/"
sameSite="none"
secure=true
如果我在下面包含域设置,我会收到一条错误消息,“Set-Cookie 被阻止,因为它的域属性对于当前主机 url 无效”。所以我把它排除在外。所有其他设置均为默认设置。
domain='https://front.domainA.com'
话虽如此,这些 cookie 实际上已被 Chrome 确认。如果我单击锁(或 i)、地址栏左侧的图标(或 i)、浏览器栏左侧的图标,它们就会显示在那里。它们还显示在 http 响应标头中。但它们不会出现在 cookie 存储中,也不会被 Javascript 读取。
我的想法是,唯一的解决方案是将后端和前端都放在同一个顶级域上。也许后端位于 api.xxxx 子域。
我的假设是对的吗?还是我缺少此问题的其他解决方案?也许我也缺少允许这样做的 AWS Amplify 设置?
提前感谢您的任何回复。