跨域(Cross-Origin)指的是浏览器阻止网页向不同域(不同协议、端口、域名)的服务器发起请求,这是 Same-Origin Policy(同源策略) 造成的。
📌 什么是“同源”? 如果两个 URL 具有相同的:
它们就属于 同源(Same-Origin)。
示例:
<http://example.com:80> ✅ 同源
<http://example.com:8080> ❌ 不同端口
<https://example.com> ❌ 不同协议
<http://api.example.com> ❌ 不同子域名
如果请求的目标域和当前网页的域不一致,就会触发跨域问题。
你在 localhost:3000(React/Next.js 开发环境)发请求到 api.example.com,浏览器会拦截:
fetch("<https://api.example.com/data>")
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error("请求失败", err));
🔴 浏览器控制台报错:
Access to fetch at '<https://api.example.com/data>' from origin '<http://localhost:3000>' has been blocked by CORS policy
📌 为什么?