全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-18 5 分钟 ✍️ juanwangdev

跨域问题产生原因

浏览器出于安全考虑,实施了同源策略,这是跨域问题的根本原因。

什么是同源策略

同源策略(Same-Origin Policy)是浏览器最核心的安全机制,要求协议、域名、端口三者完全相同才算同源。

同源判定规则

URL对比协议域名端口是否同源
http://localhost:8080/api vs http://localhost:8080/user相同相同相同
http://localhost:8080 vs http://localhost:9090相同相同不同
http://localhost:8080 vs https://localhost:8080不同相同相同
http://localhost:8080 vs http://127.0.0.1:8080相同不同相同

跨域限制的表现

当浏览器发起跨域请求时,会受到以下限制:

1. AJAX请求限制

JavaScript
// 前端页面: http://localhost:3000
fetch('http://localhost:8080/api/users')
  .then(response => response.json())
  .catch(error => console.error('跨域错误:', error));

控制台报错示例:

text
Access to fetch at 'http://localhost:8080/api/users' from origin 'http://localhost:3000'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present.

2. DOM操作限制

无法获取不同源页面的DOM元素,防止恶意网站读取敏感信息。

3. Cookie限制

无法读取或设置不同源的Cookie。

为什么需要同源策略

同源策略防止以下安全威胁:

  1. CSRF攻击:防止恶意网站伪造用户请求
  2. XSS信息窃取:防止跨站脚本读取敏感数据
  3. 点击劫持:防止恶意网站嵌入正常网站进行欺骗

跨域问题的本质

跨域不是请求发不出去,而是浏览器拦截了响应

实际流程:

  1. 浏览器发送跨域请求
  2. 服务器正常接收并返回响应
  3. 浏览器检查响应头中的CORS信息
  4. 若不符合要求,浏览器丢弃响应并报错

常见跨域场景

场景说明
前后端分离前端localhost:3000,后端localhost:8080
多个子域a.example.com 访问 b.example.com
开发调试本地开发连接测试服务器
第三方API调用外部服务接口

要点总结

  • 同源策略要求协议、域名、端口完全一致
  • 跨域限制是浏览器行为,服务器不受影响
  • 请求发出去了,响应被浏览器拦截
  • 同源策略是重要的Web安全机制
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 Spring MVC 国际化消息
下一篇 → CORS协议详解
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码