Angular4开发解决跨域问题详解
发布时间 - 2026-01-11 03:00:04 点击率:次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的输入属性与输出属性实例详解
# 都是
# 器上
# 只需要
# 后端
# 代理服务器
# 多个
# 就可以
# 转发给
# 客户端
# 我就
# 这一
# 我在
# 我不
# 第一个
# 又是
# 都要
# 不需要
# 还能
# 是指
# 为你
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Laravel观察者模式如何使用_Laravel Model Observer配置
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何快速搭建虚拟主机网站?新手必看指南
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
如何快速搭建高效可靠的建站解决方案?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
网易LOFTER官网链接 老福特网页版登录地址
Android仿QQ列表左滑删除操作
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
Laravel如何实现事件和监听器?(Event & Listener实战)
详解jQuery中基本的动画方法
如何在万网利用已有域名快速建站?
如何在景安云服务器上绑定域名并配置虚拟主机?
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
使用C语言编写圣诞表白程序
如何用已有域名快速搭建网站?
制作企业网站建设方案,怎样建设一个公司网站?
EditPlus中的正则表达式 实战(4)
网站图片在线制作软件,怎么在图片上做链接?
Python高阶函数应用_函数作为参数说明【指导】
Laravel安装步骤详细教程_Laravel环境搭建指南
如何快速搭建安全的FTP站点?
Laravel如何使用withoutEvents方法临时禁用模型事件
如何构建满足综合性能需求的优质建站方案?
潮流网站制作头像软件下载,适合母子的网名有哪些?
音乐网站服务器如何优化API响应速度?
Laravel如何处理CORS跨域请求?(配置示例)
制作旅游网站html,怎样注册旅游网站?
Laravel如何优化应用性能?(缓存和优化命令)
Laravel怎么在Controller之外的地方验证数据
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
Laravel如何处理文件下载请求?(Response示例)
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Laravel模型事件有哪些_Laravel Model Event生命周期详解
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
iOS UIView常见属性方法小结
JS去除重复并统计数量的实现方法
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
如何在香港免费服务器上快速搭建网站?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】

