浏览器同源策略与跨域

文章详细介绍了同源策略及其限制,包括对cookie、localStorage、DOM及Ajax的影响。接着讨论了四种跨域方案:JSONP、CORS(包括预检请求)、window.postMessage以及在Vue框架中使用的proxy代理。每种方法都有其优缺点和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同源策略

protocol,domain,port三者必须相同

同源限制

  • 当前域下的 js 脚本不能够访问其他域下的 cookie、localStorage 和 indexDB。
  • 当前域下的 js 脚本不能够操作访问操作其他域下的 DOM。
  • 当前域下 ajax 无法发送跨域请求。

跨域方案

 如果想深刻理解每个方案,推荐看以下两个链接,大佬写的非常详细,这里只重点排一下个人前端可能用的比较多的方案

前端面试题之浏览器原理篇 (yuque.com)--七、同源策略

跨域的十种解决方案 - 掘金 (juejin.cn)

1.jsonp

利用 html中的script src标签 加载其他源的数据

(href,src,link请求的图片、视频等都不存在跨域问题,经过ajax请求得数据才存在跨域问题)

<body>
	<script type="text/javascript">
		function f(data){
			alert(data)
		}
	</script>
	<script src="其他源?callback=f"></script>
</body>

优点:简单兼容性好

缺点

  • 仅支持get方法
  • 不安全,可能遭受XSS攻击

2.cors 跨域资源共享

后台修改响应头Access-Control-Allow-Origin,开启CORS

  • * 允许所有请求
  • 域名,允许指定域名请求

发送请求分类

简单请求

复杂请求

非简单请求就是复杂请求,在正式通信之前,增加一次HTTP查询请求,称为"预检"请求,,该请求是 option 方法的,通过该请求来知道服务端是否允许跨域请求。

头信息必须要有的字段

  • Access-Control-Request-Origin:
  • Access-Control-Request-Method:列出浏览器的CORS请求会用到哪些HTTP方法
  • Access-Control-Request-Header:是一个字符串,指定浏览器CORS请求会额外发送的头信息字段

3.h5  window.postMessage跨域

主流浏览器 ie8

可解决:

  1. 页面和其打开的新窗口的数据传递
  2. 多窗口之间消息传递
  3. 页面与嵌套的iframe消息传递
  4. 上面三个场景的跨域数据传递

4.框架(vue)中的跨域

使用proxy代理,本质上还是cors跨域

(项目中常用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值