跨域解决方法的原理

154 阅读1分钟

今天被面试官问到了proxy-middleware和jsonp的原理,无奈只是听说过,工作没有遇到过,所以花了点时间整理了一下大概的原理,仅作参考,欢迎指正。

跨域

原因:浏览器的同源策略拒绝了前端的请求

nginx

在nginx中配置地址重写:
访问地址以某个开头的都会被这个模块捕获,重写转发到后端项目上去。

访问地址以/js开头的也被这个模块捕获,转发到前端项目上去。

http-proxy-middleware

需要npm下载

 http-proxy-middleware用于后台将请求转发给其它服务器。
 let proxy = require('http-proxy-middleware');
 let apiProxy = proxy('/api', {target: 'http://www.example.org'});
 //                   \____/   \_____________________________/
 //                     |                    |
 //                需要转发的请求           目标服务器
 将http-proxy进行封装,更容易使用,类似于nginx,将所有的请求转发到目标服务器上

jsonp

利用可以绕过同源策略检测的标签来解决跨域
iframe应该也是不受浏览器同源策略的影响,所以可以跨域

由于浏览器收同源策略的限制,网页无法通过Ajax请求非同源的接口数据,
但是script标签不受浏览器同源策略的影响,可以通过src属性请求非同源js脚本。
简而言之,JSONP的实现原理就是通过<script>标签的src属性,请求跨域的数据接口,
并通过函数调用的形式,接收跨域接口响应回来的数据

缺点:只支持GET数据请求,不支持POST请求

谷歌一行命令

应该是关闭了浏览器的同源策略(自己的推测)