Web Storage默认不能跨域访问,因受同源策略限制:协议、域名、端口三者必须完全一致才视为同源,方可共享localStorage或sessionStorage;跨域共享需通过postMessage+iframe、隐藏iframe代理或服务端中转等合规方式实现。

Web Storage(包括 localStorage 和 sessionStorage)默认不能跨域访问,这是浏览器强制执行的同源策略(Same-Origin Policy)决定的——协议、域名、端口三者必须完全一致,才视为“同源”,才能共享同一份存储空间。
什么是“同源”?
判断是否同源,看三个部分是否全部相同:
- 协议:比如
https://和http://不同源(哪怕域名一样) - 域名:比如
example.com和sub.example.com不同源(子域名不算同源) - 端口:比如
:8080和:3000不同源(即使本地开发时容易忽略)
只要其中任一不同,两个页面就无法读写彼此的 localStorage 或 sessionStorage。
常见跨域失败场景
这些情况看似“差不多”,实际都会触发隔离:
- 从
https://site.com存数据,用户用http://site.com打开 → 数据不可见 - 主站
https://a.com嵌入https://b.com的 iframe → iframe 内无法访问父页的 localStorage - 开发时用
localhost:3000和127.0.0.1:3000→ 浏览器视为两个不同源 - 同一域名下,
/page1和/page2页面可以共享 → 路径不影响同源判断
如何安全地实现跨域数据共享?
不能绕过同源策略,但可以通过合规方式间接协作:
- postMessage + iframe:在可信跨域页面间建立消息通道,一方发数据,另一方收到后存入自己的 localStorage
-
隐藏 iframe 代理:在目标域下部署一个轻量代理页(如
storage-proxy.html),由它负责操作本域的 storage,主页面通过 postMessage 控制它 - 服务端中转:把需要共享的数据统一存在后端,各前端页面通过 API 读写,规避浏览器限制
不建议用 document.domain(已废弃)、修改协议或端口等方式“打补丁”,既不安全也不稳定。
注意:隐私模式和特殊环境
部分浏览器在无痕/隐私模式下会禁用或清空 Web Storage;某些企业环境或安全插件也可能拦截或重置存储。敏感数据(如 token)若需跨域使用,更推荐结合后端鉴权与短期有效凭证,而非依赖前端存储直传。

















