crossorigin="use-credentials"本身不自动发送cookie,仅表示允许带凭据请求;必须服务端返回精确access-control-allow-origin(不能为*)和access-control-allow-credentials: true,且cookie需设samesite=none; secure,环境须匹配(如https),缺一不可。

crossorigin="use-credentials" 本身不自动发 Cookie
浏览器不会因为加了 crossorigin="use-credentials" 就自动带上当前域的 Cookie——它只表示“允许带凭据发起请求”,但前提是:脚本资源所在的响应头必须明确许可,且请求目标域与当前页满足同源或 CORS 显式授权。
常见错误是只改 HTML 标签,却没配服务端响应头,结果控制台报错:Access to script at 'https://api.example.com/script.js' from origin 'https://myapp.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.
-
crossorigin="use-credentials"等价于 fetch 的credentials: "include",要求服务端返回Access-Control-Allow-Origin为具体域名(不能是*) - 服务端还必须返回
Access-Control-Allow-Credentials: true - Cookie 必须已设置
SameSite=None; Secure(HTTPS 环境下强制要求),否则浏览器根本不会在跨域请求中发送它
HTML 中 script 标签怎么写才真正触发 Cookie 发送
只有当脚本 URL 是跨域、且服务端响应头合规时,crossorigin="use-credentials" 才起作用。写法很简单,但条件苛刻:
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
<script src="https://api.example.com/authed-script.js" crossorigin="use-credentials"></script>
- 必须是跨域 URL(协议、域名、端口任一不同即算跨域);同域脚本加这个属性无效,也不发 Cookie
- 不能用
crossorigin=""或crossorigin="anonymous",这两个值都会丢弃 Cookie - 如果脚本是动态插入(比如通过
document.createElement("script")),需在插入前显式设置script.crossOrigin = "use-credentials"
为什么本地开发时总失败?常见环境陷阱
本地 file:// 协议或 http://localhost 调用 HTTPS 接口时,Cookie 几乎必然丢失:
-
http://页面无法向https://域发送带Secure标志的 Cookie(浏览器直接过滤) -
file://协议下,CORS 完全失效,crossorigin属性被忽略,且 Cookie 机制不工作 - Chrome 对
localhost有特殊宽松策略,但依然要求服务端返回精确匹配的Access-Control-Allow-Origin: http://localhost:3000,而非* - 后端框架(如 Express、Nginx)默认不返回
Access-Control-Allow-Credentials,需手动开启,且不能和*同时存在
替代方案:不用 script 标签,改用 fetch + eval 更可控
当 <script></script> 加载行为太不可控(比如要调试 Cookie 是否真发出、或需处理 401 错误重定向),可绕过标签限制,手动 fetch:
fetch("https://api.example.com/script.js", {
credentials: "include",
headers: { "Accept": "application/javascript" }
})
.then(r => r.text())
.then(code => {
// 注意:eval 有安全风险,仅限可信脚本
eval(code);
});
- 能捕获网络错误、HTTP 状态码、响应头,便于定位 CORS 或 Cookie 问题
- 避免了 script 标签的预加载优化和执行时机黑盒
- 但
eval会丢失 source map,且违反 CSPunsafe-eval策略;生产环境更推荐将脚本内容转为模块,用import()动态导入(同样支持credentials)
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










