跨域问题

25 阅读1分钟

跨域问题的来源:浏览器的同源策略

浏览器出于安全考虑,不允许网页随意访问不同源的资源。

同源定义

  • 协议(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)

  • 前端请求开发服务器(同源)
  • 开发服务器把请求转发给真实后端
  • 浏览器只看到同源请求,不会报错
  • 这是前端开发中最常用的方式