这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战
跨域问题是我们前端经常会遇到的问题,而且目前在面试的时候也经常会问到跨域的问题。那为什么会产生跨域,跨域是什么,有如何避免跨域问题呢,前端后端都可以有什么解决方案,我自己做了一些总结:
同源策略: 是一个重要的安全策略,用于限制一个origin的文档或者它加载的脚本如何能与另一源进行交互。它能帮助阻挡恶意文档,减少可能被攻击的媒介。 同源:协议 ,域名,端口号一致。
跨域是什么?
在浏览器同源策略的限制下,浏览器不允许访问其他网站的脚本
解决跨域的方案
1.后端设置CORS
通过设置 http 请求头来告诉浏览器让运行在一个origin的web应用被准许访问来自不同源服务器上的指定的资源。
// 在node端设置一下请求头,允许接收所有源地址的请求 res.header('Access-Control-Allow-Origin', ''); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header('Access-Control-Allow-Headers', '');
2.前后端配合的jsonp方式,只支持get请求
利用script link img这些不存在同源限制的标签。当要发送请求时利用script指定目标的url,浏览器会执行script脚本里的代码。在script脚本里指定方法,并且设置后端回调方法也是同样方法名。请求成功后就会调用方法接收数据。
3.window.postMessage 此方法可以安全地实现跨源通信, otherWindow.postMessage(message, targetOrigin, [transfer]);
postMessage的原理是基于一个其他窗口的引用,
4.document.domain 条件必须协议,端口号以及一级域名相同,二级域名不同的访问。
其他应该还有跨域的方法,但是目前来说我们项目中最多用到的就是通过第一种方式,让后端那边去设置http请求头来告诉浏览器让运行在一个origin的web应用被准许访问来自不同源服务器上的指定的资源。