跨域上传文件没有带上目标域的cookie如何解决?

思否 问答 已采纳 👍 2 含 AI 优化版

问题

跨域上传文件没有带上目标域的cookie如何解决?

在 SegmentFault 查看原问题 →

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

在跨域场景下上传文件时,请求没有携带目标域的 Cookie,导致依赖 Cookie 做身份校验的接口无法正常识别用户。

涉及技术

JavaScript、Ajax/XHR、CORS

期望结果

了解如何让跨域请求正确携带目标域的 Cookie。

回答

原始回答

2017-03-15

有代码吗?withCredentials

这个参数改成true

AI 优化 · 回答整理

解答思路

跨域请求默认不会携带 Cookie,需要显式开启凭证(credentials)选项,并配合服务端的 CORS 响应头才能生效。

示例代码

var xhr = new XMLHttpRequest();
xhr.open("POST", "https://target-domain.com/upload", true);
xhr.withCredentials = true; // 关键:允许携带跨域 Cookie
xhr.send(formData);

详细说明

浏览器出于安全考虑,跨域 Ajax 请求默认不会带上目标站点的 Cookie。要解决这个问题,需要把请求对象的 withCredentials 设置为 true(如果用的是 fetch,对应的是 credentials: 'include')。同时,服务端也必须配合:Access-Control-Allow-Credentials 需设为 true,且 Access-Control-Allow-Origin 不能是通配符 *,必须是具体的域名,否则浏览器仍会拦截响应。

小结

跨域请求想带上 Cookie,前端要开启 withCredentials(或 fetchcredentials: 'include'),后端要正确设置 CORS 响应头,两者缺一不可。

由大模型辅助整理,保留原意,补充结构与代码格式。

回答转载自 SegmentFault

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。