什么是跨域

理解浏览器的同源策略和跨域问题

问题

什么是跨域?为什么会出现跨域问题?

解答

跨域是浏览器基于同源策略的一种安全限制。

同源策略

同源策略(Same-origin policy)是浏览器的基本安全功能。所谓同源,需要满足以下三个条件:

  • 协议相同(protocol)
  • 主机相同(host)
  • 端口相同(port)

什么情况下会跨域

当协议、主机、端口任意一项不同时,就会产生跨域。

例如:

// 当前页面:https://example.com:443

// 同源
https://example.com:443/api/data  ✓

// 跨域
http://example.com:443/api/data   ✗ (协议不同)
https://api.example.com:443/data  ✗ (主机不同)
https://example.com:8080/api/data ✗ (端口不同)

跨域是浏览器的限制

需要明确的是,跨域限制只存在于浏览器端。服务器实际上已经返回了数据,但浏览器拦截了响应,不允许 JavaScript 获取。

这可以通过以下方式验证:

  • 使用抓包工具(如 Charles、Fiddler)可以看到服务器已返回数据
  • 使用 Postman 等工具可以正常请求到数据

关键点

  • 跨域是浏览器的同源策略限制,不是服务器限制
  • 同源要求协议、主机、端口三者完全相同
  • 服务器会正常返回数据,但浏览器会拦截响应
  • 非浏览器环境(如 Postman、Node.js)不存在跨域问题