全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Angular4开发解决跨域问题详解

1.跨域

浏览器对于javascript的同源策略的限制,例如a.cn下面的js不能调用b.cn中的js,对象或数据(因为a.cn和b.cn是不同域),所以跨域就出现了.

上面提到的,同域的概念又是什么呢??? 简单的解释就是相同域名,端口相同,协议相同

同源策略:

请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同.

比如:我在本地上的域名是study.cn,请求另外一个域名一段数据,这个时候在浏览器上会报错,这个就是同源策略的保护,如果浏览器对javascript没有同源策略的保护,那么一些重要的机密网站将会很危险~

2.反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

3.Angular4跨域

Angular4项目分为工程代码和生产代码,在本地调试一般都是工程代码,这样联调接口的话,每次写一个接口都要丢到服务器上测试,严重影响效率,所以我们需要做的就是能在工程项目上联调接口,随时能看到效果,但是后端代码不是部署在本机的话就会有跨域问题,于是我们便需要去着重去解决跨域问题!这样后端代码随时改,前端也可以随时更改看到效果,实现真正的前后端分离!
对于Angular4解决跨域问题,应该是开发者已经想到这个问题,所以解决这个问题很简单!那就是反向代理!!

下面介绍反向代理的方法:

1.首先需要建立一个JSON文件,文件名”proxy.config.json”

{
 "/api":{
  "target":"http://106.15.179.92"
 }
}

http://106.15.179.92:为你连接机器的ip地址,或者你所需要请求的接口域名,这个就是需要被代理的

/api是代理的名称,一般都是接口请求的ip地址后面的第一个参数名

比如:http://106.15.179.92/api/fron...为一个登录的接口,反向代理后写接口请求的时候只需要写

this.$http.post(`/api/front/frontUserController/login.do`,data)
   .then(res=>{
       Console.log(res);
})

因为http://106.15.179.92已经被代理到/api上!

2.然后配置”package.json”文件

"scripts": {
 "ng": "ng",
 "start": "ng serve --proxy-config proxy.config.json",
 "build": "ng build --prod --aot",
 "test": "ng test",
 "lint": "ng lint",
 "e2e": "ng e2e"
}

4.甩锅解决跨域

跨域?和我们前端有关系?有吗?没有吧!我不解决,我就不解决,你们后端去解决!

现在介绍一种对于任何项目都通用的解决跨域的方法!

用nginx反向代理实现跨域,是最简单的跨域方式。只需要修改nginx的配置即可解决跨域问题,支持所有浏览器,支持session,不需要修改任何代码,并且不会影响服务器性能。

我们只需要配置nginx,在一个服务器上配置多个前缀来转发http/https请求到多个真实的服务器即可。这样,这个服务器上所有url都是相同的域名、协议和端口。因此,对于浏览器来说,这些url都是同源的,没有跨域限制。而实际上,这些url实际上由物理服务器提供服务。这些服务器内的javascript可以跨域调用所有这些服务器上的url。

下面,给出一个nginx支持跨域的例子,进行具体说明。

如,我们有两个pythonflask开发的项目:testFlask1和testFlask2。

testFlask2项目上的javascript脚本要通过ajax方式调用testFlask1的一个url,获取一些数据。

正常情况下部署,就会有跨域问题,浏览器拒绝执行如下这样的调用。

$("button").click(function () {
  $.get("127.0.0.1:8081/partners/json", function (result) {
    $("div").html(result);
  });
});

下面把testFlask2项目的javascrip文件修改一下。这样访问同源的url,就不会有跨域问题。

$("button").click(function () {
  $.get("partners/json", function (result) {
    $("div").html(result);
  });
});

但是,我们testFlask2项目实际上没有partners/json这样的url,那怎么处理呢?

我们这样编写nginx的配置文件:

server{
 listen8000;
 location/ {
  includeuwsgi_params;
  uwsgi_passunix:/tmp/testFlask2.sock;
 }
 location/partners {
  rewrite^.+partners/?(.*)$ /$1 break;
  includeuwsgi_params;
  uwsgi_passunix:/tmp/testFlask1.sock;
 }
}

我们把testFlask2项目部署在8080端口的根目录下。把提供web服务的testFlask1项目部署在/partners目录下。

但我们的testFlask1项目并不能处理/partners/json这样的url请求。那怎么办呢?

通过rewrite^.+partners/?(.)$ /$1 break; 这一条命令,nginx可以把收到的/partners/请求全部转为/*请求后再转发给背后的真实web服务器。

这样,RESTFUL的ajax客户端程序,只需要给出特定前缀的url就可以调用任意服务器提供的RESTFUL接口了。

甚至,通过nginx的反向代理,我们还能调用其他公司开发的网站提供的RESTFUL接口。

如,

location/sohu {
 rewrite^.+sohu/?(.*)$ /$1 break;
 includeuwsgi_params;
 proxy_passhttp://www.sohu.com/;
}

我们就把sohu网站整个搬到我们的8080:/sohu/目录下了,我们的javascript就可以尽情调用其RESTFUL服务了。

顺便说一下,rewrite^.+sohu/?(.)$ /$1 break; 这句命令中,$1表示(.)这个部分。第一对()内的参数是$1,第二对()内的参数就是$2,以此类推。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Angular4  # 跨域  # 解决跨域问题  # Web前端框架Angular4.0.0 正式版发布  # Angular4 中常用的指令入门总结  # 浅谈angular4生命周期钩子  # Angular4学习笔记之准备和环境搭建项目  # Angular4 中内置指令的基本用法  # 详解Angular4 路由设置相关  # 深入理解Angular4中的依赖注入  # angular4中关于表单的校验示例  # Angular4学习笔记之实现绑定和分包  # 浅谈angular4 ng-content 中隐藏的内容  # Angular4的输入属性与输出属性实例详解  # 都是  # 器上  # 只需要  # 后端  # 代理服务器  # 多个  # 就可以  # 转发给  # 客户端  # 我就  # 这一  # 我在  # 我不  # 第一个  # 又是  # 都要  # 不需要  # 还能  # 是指  # 为你 


相关文章: 智能起名网站制作软件有哪些,制作logo的软件?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  建站之星代理如何获取技术支持?  英语简历制作免费网站推荐,如何将简历翻译成英文?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何选择高效可靠的多用户建站源码资源?  海南网站制作公司有哪些,海口网是哪家的?  黑客如何通过漏洞一步步攻陷网站服务器?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  南宁网站建设制作定制,南宁网站建设可以定制吗?  深圳网站制作的公司有哪些,dido官方网站?  制作门户网站的参考文献在哪,小说网站怎么建立?  西安专业网站制作公司有哪些,陕西省建行官方网站?  Python如何创建带属性的XML节点  安徽网站建设与外贸建站服务专业定制方案  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  建站之星如何助力企业快速打造五合一网站?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  如何挑选优质建站一级代理提升网站排名?  自助网站制作软件,个人如何自助建网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  建站之星导航配置指南:自助建站与SEO优化全解析  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  网站制作企业,网站的banner和导航栏是指什么?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  电商平台网站制作流程,电商网站如何制作?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  如何选择适配移动端的WAP自助建站平台?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  h5在线制作网站电脑版下载,h5网页制作软件?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  临沂网站制作公司有哪些,临沂第四中学官网?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何高效配置IIS服务器搭建网站?  建站之星后台密码遗忘?如何快速找回?  建站之星如何优化SEO以实现高效排名?  Swift开发中switch语句值绑定模式  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  如何在服务器上三步完成建站并提升流量?  c# 在高并发场景下,委托和接口调用的性能对比  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  建站之星如何快速更换网站模板? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。