跨域问题的来源:浏览器的同源策略
浏览器出于安全考虑,不允许网页随意访问不同源的资源。
同源定义:
- 协议(http/https)
- 域名(example.com)
- 端口(80, 443, 5173…)
三个都完全相同,才算同源。
为什么浏览器要限制跨域
- 防止恶意网页偷取 cookie 或 localStorage
- 防止 CSRF 攻击(跨站请求伪造)
简单理解:浏览器不信任网页的请求,要求同源才能直接访问。
跨域的表现
当你在前端代码里写:
fetch('http://localhost:8080/api/users')
.then(res => res.json())
.then(data => console.log(data))
如果你的网页在 http://localhost:5173,浏览器就会报:
Access to fetch at 'http://localhost:8080/api/users' from origin 'http://localhost:5173' has been blocked by CORS policy
这就是典型的跨域问题。
解决跨域的方式
后端允许跨域(CORS)
后端在响应头加:
`Access-Control-Allow-Origin: http://localhost:5173`
使用开发服务器代理(Proxy)
- 前端请求开发服务器(同源)
- 开发服务器把请求转发给真实后端
- 浏览器只看到同源请求,不会报错
- 这是前端开发中最常用的方式