加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

前端开发 | 那些年曾谈起的跨域

发布时间:2019-06-21 20:29:08 所属栏目:建站 来源:Aaron
导读:对于前端开发来说跨域应该是最不陌生的问题了,无论是开发过程中还是在面试过程中都是一个经常遇到的一个问题,在开发过程中遇到这个问题的话一般都是找后端同学去解决,以至于很多人都忽略了对跨域的认识。为什么会导致跨域?遇到跨域又怎么去解决呢?本

main.js

  1. import http from "http";  
  2. import httpProxy from "http-proxy";  
  3. // 新建一个代理 Proxy Server 对象    
  4. const proxy = httpProxy.createProxyServer({});     
  5. // 捕获异常    
  6. proxy.on('error', function (err, req, res) {    
  7.   res.writeHead(500, {    
  8.     'Content-Type': 'text/plain'    
  9.   });    
  10.   res.end('error');    
  11. });       
  12. // 在每次请求中,调用 proxy.web(req, res config) 方法进行请求分发    
  13. const server = http.createServer((req, res) => {   
  14.   // 在这里可以自定义你的路由分发    
  15.   let host = req.headers.host, ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;    
  16.   switch(host){    
  17.     case 'www.a.com':     
  18.         proxy.web(req, res, { target: 'http://localhost:3000' });    
  19.         break;    
  20.     case 'www.b.com':    
  21.         proxy.web(req, res, { target: 'http://localhost:4000' });    
  22.         break;  
  23.     default:    
  24.         res.writeHead(200, {    
  25.             'Content-Type': 'text/plain'    
  26.         });    
  27.         res.end('Hello Aaron!');    
  28.   }    
  29. });    
  30. server.listen(8080);  

如代码所示,当访问www.a.com的时候,请求就被转发到了3000接口上,访问www.b.com时就被转发到了4000这个接口上。这样就简单的完成了一个反向代理的工作。

在使用vue开发的时候难免也会遇到跨域问题,或许你根本就没有遇到,可能你们正好处于同一个域里面,还有一种可能就是,后端同学或者运维同学已经处理好有关跨域的相关操作。但是当在开发过程中遇到跨域的时候,什么前端应该有对应的解决办法。vue-cli是基于Node服务的,所以我们可以利用这个服务来做代理工作,暂时解决开发中的跨域问题。

build/webpack.config.js

  1. module.exports = {  
  2.     devServer: {  
  3.         historyApiFallback: true,  
  4.         proxy: [{  
  5.             context: '/login',  //  url以/login为开头时启用代理  
  6.             target: 'http://www.a.com:8080',  // 代理跨域目标接口  
  7.             changeOrigin: true,  
  8.             secure: false,  // 当代理某些https服务报错时用  
  9.             cookieDomainRewrite: 'www.b.com'  // 可以为false,表示不修改  
  10.         }],  
  11.         noInfo: true  
  12.     }  
  13. }  

在开发过程中遇到的可以通过这种方式解决,但是到达生产环境时到底使用什么方法还是需要斟酌的,毕竟要使服务数据变得更加的安全才是最好的。

总结

以上讲了很多有关跨域的解决方案,有利也有弊,对于我而言可能更加的倾向于后端粑粑或者运维粑粑去解决跨域问题,毕竟前端处理起来毕竟不是很安全,而且后端或者运维处理起来也不是那么的麻烦。

很感谢大家利用这么长时间来读这篇文章,文章中若有错误请在下方留言,会尽快做出修改。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读