浏览器同源策略
浏览器同源策略的定义、作用和限制范围
问题
浏览器的同源策略是什么?
解答
同源策略(Same Origin Policy)是浏览器的基本安全功能,用于限制不同源之间的资源访问。它基于一个原则:从任何站点加载的内容都是不可信的,脚本只能访问同源资源,不能访问其他站点的资源。
什么是同源
同源需要满足三个条件:
- 协议相同(如都是
https://) - 域名相同(如都是
example.com) - 端口相同(如都是
443)
例如:
https://example.com:443/page1
https://example.com:443/page2
// 同源
https://example.com:443/page1
http://example.com:443/page1
// 不同源(协议不同)
https://example.com:443/page1
https://api.example.com:443/page1
// 不同源(域名不同)
同源策略的限制范围
同源策略分为两类:
DOM 同源策略
禁止对不同源页面的 DOM 进行操作。主要体现在 iframe 场景中,不同域名的 iframe 无法互相访问对方的 DOM。
// 父页面:https://a.com
// iframe:https://b.com
// 无法访问
const iframeDoc = document.getElementById('myIframe').contentDocument;
XMLHttpRequest 同源策略
禁止使用 XHR 对象向不同源的服务器发起 HTTP 请求。
// 当前页面:https://a.com
// 以下请求会被浏览器阻止
fetch('https://b.com/api/data');
关键点
- 同源要求协议、域名、端口三者完全相同
- DOM 同源策略限制跨域 iframe 的 DOM 访问
- XMLHttpRequest 同源策略限制跨域 HTTP 请求
- 同源策略是浏览器安全的基础机制
目录