同源策略(Same-Origin Policy)是浏览器最核心的安全策略之一,限制了来自不同源的文档或脚本对当前文档的资源进行访问。
解决的核心痛点:如何在允许 Web 开放性的同时,保护用户数据安全?
核心命题
- 同源策略通过协议+域名+端口判断资源是否同源
- 原理:三者相同才视为同源,任一不同则为跨域
- 同源策略限制跨域读取但不限制跨域写入和嵌入
- 原理:script/img/link 等标签可以跨域加载,但无法读取跨域资源内容
同源定义
协议 + 域名 + 端口三者相同。
限制范围
| 操作 | 是否限制 |
|---|---|
| 跨域写操作 | 允许 |
| 跨域嵌入(script/img/link) | 允许 |
| 跨域读取 | 不允许 |
跨域解决方案
| 方案 | 说明 |
|---|---|
| CORS | 服务端设置响应头允许跨域 |
| JSONP | 利用 script 标签(仅 GET) |
| 代理 | 服务端转发请求 |
| PostMessage | 窗口间通信 |
| WebSocket | 全双工协议,无同源限制 |