🚀 前言
阅读完本文,你将理解:
- CORS(跨域资源共享)到底是什么
- 浏览器为什么会突然拦截你的 API 请求
- 常见 CORS 报错背后的真实含义(其实并不可怕)
✅ 什么是 CORS(Cross-Origin Resource Sharing)
CORS 的本质是:
浏览器在问:
“这个网页,可以访问另一个‘地址’的资源吗?”
如果没有明确允许,浏览器就会主动阻止。
🌐 先理解什么是「Origin(源)」
一个 Origin(源) 由三部分组成:
- 协议(http / https)
- 域名(example.com)
- 端口(:80 / :443)
只要其中 任意一项不同,就属于 跨域(Cross-Origin)。
示例:
https://example.comhttps://api.example.com❌ 域名不同http://example.com❌ 协议不同
🔐 CORS 存在的真正目的
只有一个核心目的:
✅ 防止恶意网站在你不知情的情况下读取敏感信息
🏠 举个生活化的例子:家里的邮箱
- 家人(同源) → 直接投递
- 陌生人(跨域) → 先确认身份
CORS 就是浏览器自动做的「身份确认」。
⚠️ 如果没有 CORS 会怎样?
如果浏览器完全不检查跨域:
- 恶意网站可以读取:
- 银行信息
- 登录状态的 Cookie
- 个人隐私数据
👉 整个 Web 将变成不设防的环境。
所以:CORS 不是限制你,而是在保护你。
💥 常见出现 CORS 的场景
新手最常遇到的情况:
- 前端(HTML / JavaScript)调用 API
localhost:3000请求线上接口- Cloudflare Pages / Vercel / GitHub Pages
- 控制台出现红色报错:
Access to fetch at '<https://api.example.com>'
from origin '<https://example.com>' has been blocked by CORS policy
😱 其实它只是说:
“这个请求没有被允许,我帮你挡住了。”
💡 开发者常见误解
💡 1️⃣ 不是服务器在拒绝你
真实情况是:
👉 拦截请求的是浏览器本身
- Chrome / Edge / Firefox 在执行安全策略
- 同一个 API:
- 服务器对服务器 ✅
- 浏览器发起 ❌
💡 2️⃣ 为什么 Postman / curl 能成功?
因为:
✅ CORS 是浏览器专属的安全规则
后端测试工具不受 CORS 限制。
💡 3️⃣ CORS 并非「全禁止」
服务器可以精确配置:
- 允许哪些网站
- 允许哪些 HTTP 方法
- 允许哪些请求头
这些规则都通过 HTTP Header 设置。
📚 推荐参考资料
MDN Web Docs(权威首选)
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORSWikipedia(快速理解)
https://zh.wikipedia.org/wiki/跨來源資源共享W3C 官方规范
https://www.w3.org/TR/cors/
🎯 总结
- ✅ CORS 是浏览器的安全防线
- ✅ 跨域请求都会被自动检查
- ✅ 出现报错 ≠ 程序失败
- ✅ 红色错误信息 = 正常的安全提示
- ✅ 新手会卡住是非常正常的
