什么是跨域
理解浏览器的同源策略和跨域问题
问题
什么是跨域?为什么会出现跨域问题?
解答
跨域是浏览器基于同源策略的一种安全限制。
同源策略
同源策略(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)不存在跨域问题
目录