快捷搜索:  汽车  科技

跨域解锁技巧(解锁跨域的九种姿势)

跨域解锁技巧(解锁跨域的九种姿势)其实这种办法和上一种用nginx的方法是差不多的。都是你把请求发给一个中间人,由于中间人没有同源策略,他可以直接代理或者通过爬虫或者其他的手段得到想到的数据,然后返回(是不是和VPN的原理有点类似)。8、nodejs7、nginx采用nginx做代理应该是目前跨域解决方案最好的一种。现在强调前后端分离,前端根据后端提供的接口进行数据的交互然后渲染页面。在前端三大框架的同时,开发过程中不需要我们针对跨域配置很多。在网页上线以后。我们经常采用nginx来加载静态的资源,我们把我们前端打包好的文件放到nginx的目录下面,让nginx来处理客服端的静态资源的请求。然后后端部署到另外一个端口号上面,当我们需要进行数据的交互的时候,通过nginx代理把后端数据代理到前端页面。这样的步骤是相较于传统的跨域是最简单也是最有效的一种方法,因为nginx又没有同源策略。不用考虑什么兼容性也不用考虑数据大小。

写在前面

针对本文的九种方法我均写的有相应的demo演示(对应的前端文件,后端文件和配置文件),强烈建议不熟悉的朋友都去尝试一下。

网络上存在很多不同的跨域文章,我在学习的时候基本上也是去看他们的文章,但是有些地方的确理解起来有点困难,所以本文就这样产生了,希望能写一点和现在网络上文章中都不一样的东西。同时也把我自己的看法写进去,和大家相互交流自己的看法。

跨域在以前一直折磨着每个前端开发者。但是现在,三大框架的普及,我们在开发的过程中,只修改小小的配置,便没有这些顾虑。但实质上还是webpack-dev-server已经帮我们处理了这一个问题,把当前请求,代理到目标服务器上面,然后把获取到的数据返回。所以,现在很多前端开发者,包括我在写这篇文章之前,对跨域都不是很了解,只有一个个模模糊糊的概念,只会用jsonp去获取,或者直接用jq的JSONp方法去解决跨域,都不会去了解为什么这样就能解决跨域?甚至,很多人对跨域都已经放弃了,因为三大框架的学习,完善的脚手架功能,简化了我们,项目部署也有后端的同学帮我们解决。但是个人认为跨域是每一个前端开发者需要必备的能力,不论是跨域获取数据,还是后面进行ssr服务端渲染的配置都需要了解一点跨域,了解一点请求的代理。

跨域请求响应信息

跨域解锁技巧(解锁跨域的九种姿势)(1)

7、nginx

采用nginx做代理应该是目前跨域解决方案最好的一种。现在强调前后端分离,前端根据后端提供的接口进行数据的交互然后渲染页面。在前端三大框架的同时,开发过程中不需要我们针对跨域配置很多。在网页上线以后。我们经常采用nginx来加载静态的资源,我们把我们前端打包好的文件放到nginx的目录下面,让nginx来处理客服端的静态资源的请求。然后后端部署到另外一个端口号上面,当我们需要进行数据的交互的时候,通过nginx代理把后端数据代理到前端页面。这样的步骤是相较于传统的跨域是最简单也是最有效的一种方法,因为nginx又没有同源策略。不用考虑什么兼容性也不用考虑数据大小。我们在服务器(或者测试代码的时候在本地)安装nginx服务,然后找到我们nginx的配置文件,添加以下配置文件:

server { # 把页面部署的端口 listen 8080; # 静态页面存放的目录 root /var/www/html; index index.html index.htm index.php; # 只代理 /api 开头的接口,其他接口不代理 location /api/ { # 需要代理的地址, 输入我们的后台api地址 proxy_pass http://127.0.0.1:8888; } }

这样,我们可以代理不同url开头的请求到不同的后端进行处理,对以后服务器做负载均衡和反向代理也很简单。

8、nodejs

其实这种办法和上一种用nginx的方法是差不多的。都是你把请求发给一个中间人,由于中间人没有同源策略,他可以直接代理或者通过爬虫或者其他的手段得到想到的数据,然后返回(是不是和VPN的原理有点类似)。

当然现在常见的就是用nodejs作为数据的中间件,同样,不同的语言有不同的方法,但是本质是一样的。我上次自己同构自己的博客页面,用react服务器端渲染,因为浏览器的同源策略,请求不到数据,然后就用了nodejs作为中间件来代理请求数据。

部分代码:

const Koa = require('koa'); // 代理 const Proxy = require('koa-proxy'); // 对以前的异步函数进行转换 const Convert = require('koa-convert'); const app = new Koa(); const server = require('koa-static'); app.use(server(__dirname "/www/" { extensions: ['html']})); app.use(Convert(Proxy({ // 需要代理的接口地址 host: 'http://127.0.0.1:8888' // 只代理/api/开头的url match: /^\/api\// }))); console.log('服务运行在:http://127.0.0.1:7777'); app.listen(7777);

是不是和nginx很类似呀!!

9、webSocket

webSocket大家应该都有所耳闻,主要是为了客服端和服务端进行全双工的通信。但是这种通信是可以进行跨端口的。所以说我们可以用这个漏洞来进行跨域数据的交互。

我个人认为,这种方法实质上和postMessage差不多,但是不是特别的常用吧!(仅仅个人看法)

所以说我们可以很轻松的构建基于webSocket构建一个客服端和服务端。代码在github建议大家都多多去运行一下,了解清楚。这里就不贴了。

写在最后:看到这里,点了关注吧!

跨域解锁技巧(解锁跨域的九种姿势)(2)

猜您喜欢: