详解基于angular-cli配置代理解决跨域请求问题
发布时间 - 2026-01-11 02:11:38 点击率:次1.跨域请求产生

随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本。为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本。
而前后端分离带来的一个问题就是前端web部署的服务器和后端提供服务的服务器大概率不在同一个域名下,进而会产生跨域问题。
2.通用解决方案
如果浏览器支持HTML5,那么就可以一劳永逸地使用新的跨域策略:CORS了。
CORS全称Cross-Origin Resource Sharing,是html5规范定义的如何跨域访问资源。
了解CORS前,我们先搞明白概念:
Origin表示本域,也就是浏览器当前页面的域。当JavaScript向外域(如sina.com)发起请求后,浏览器收到响应后,首先检查Access-Control-Allow-Origin是否包含本域,如果是,则此次跨域请求成功,如果不是,则请求失败,javascript将无法获取到响应的任何数据。
用一个图来表示就是:
假设本域是my.com,外域是sina.com,只要响应头Access-Control-Allow-Origin为http://my.com,或者是*,本次请求就可以成功。
可见,跨域能否成功,取决于对方服务器是否愿意给你设置一个正确的Access-Control-Allow-Origin,决定权始终在对方手中。
上面这种跨域请求,称之为“简单请求”。简单请求包括GET、HEAD和POST(POST的Content-Type类型仅限application/x-www-form-urlencoded、multipart/form-data和text/plain),并且不能出现任何自定义头(例如,X-Custom: 12345),通常能满足90%的需求。
无论你是否需要用JavaScript通过CORS跨域请求资源,你都要了解CORS的原理。最新的浏览器全面支持Html5。在引用外域资源时,除了JavaScript和CSS外,都要验证CORS。
浏览器确认服务器响应的Access-Control-Allow-Methods头确实包含将要发送的AJAX请求的Method,才会继续发送AJAX,否则,抛出一个错误。
由于以POST、PUT方式传送JSON格式的数据在REST中很常见,所以要跨域正确处理POST和PUT请求,服务器端必须正确响应OPTIONS请求。
需要深入了解CORS的童鞋请移步W3C文档。
3.angular-cli代理配置解决跨域请求问题
使用CORS的确是可以很好的解决跨域问题,但是需要后端开发人员配合,如果想在不修改后端代码的前提下解决问题,配置代理绝对是不二选择。
使用tomcat、nginx…配置代理当然可以,但是麻烦,需要先打包代码再部署到nginx(或者其他)中,才能测试使用,为了保证开发效率,我们希望代码能够即写即测,这时在angular-cli中配置代理的优势就先露无疑。
在angular的开发中,angular-cli非常的方便,强烈推荐使用,今天我们主要讲述一下angular-cli如何通过配置代理解决跨域请求问题。
需要了解angular-cli的童鞋请移步angular-cli 官方文档
假如你现在已经使用angular-cli构建你的项目,并且程序正常运行,那么我们现在开始配置cli的代理:
1.首先我们创建代理配置文件proxy.conf.json
假如你的后端服务的访问地址为“10.4.60.200:8080”,以下为proxy.conf.json的例子:
{
"/api": {
"target": "http://10.4.60.200:8080",
"secure": false
}
}
2.改写package.json
修改启动命令,默认使用npm start时使用代理文件配置的代理
"start": "ng serve --proxy-config proxy.conf.json",
此时此刻当你再使用npm strat启动angular项目时,代理已经配置好了,我们还是以上面的服务url为例,如果原先你需要访问http://10.4.60.200:8080/api/server获取服务,那么现在你只需要把代码中的“10.4.60.200:8080”改为“localhost:4200”即可(cli默认端口为4200,根据自己的启动端口编写)。
此时你的所有服务请求在浏览器看来都是同域请求,不再存在跨域问题,上面所讲只是一个简单的例子,代理有很多参数可以选择配置,例如在代理时对cookie重写可以写为”cookieDomainRewrite”:”localhost”。
更多更详细的代理配置可以参考webpack-dev-server proxy settings
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angular解决跨域请求
# angular
# cli
# 配置代理
# 代理
# Angular通过 HTTP Interceptor 实现 HTTP 请求超时监控的例子
# AngularJs的$http发送POST请求
# php无法接收Post的数据问题及解决方案
# angular中的post请求处理示例详解
# angularjs请求数据的方法示例
# 使用Angular内置模块进行HTTP请求
# 后端
# 都要
# 开发人员
# 就可以
# 自己的
# 都是
# 童鞋
# 文档
# 很好
# 好了
# 给你
# 多个
# 有很多
# 才会
# 推荐使用
# 我们可以
# 你现在
# 或者是
# 自定义
# 解决问题
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
Linux安全能力提升路径_长期防护思维说明【指导】
如何用PHP工具快速搭建高效网站?
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
如何快速登录WAP自助建站平台?
如何用IIS7快速搭建并优化网站站点?
香港服务器选型指南:免备案配置与高效建站方案解析
大型企业网站制作流程,做网站需要注册公司吗?
北京的网站制作公司有哪些,哪个视频网站最好?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
Laravel如何使用Collections进行数据处理?(实用方法示例)
香港服务器部署网站为何提示未备案?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
如何为不同团队 ID 动态生成多个非值班状态按钮
香港服务器租用费用高吗?如何避免常见误区?
如何快速搭建安全的FTP站点?
如何挑选最适合建站的高性能VPS主机?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Mybatis 中的insertOrUpdate操作
如何快速搭建虚拟主机网站?新手必看指南
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
网站制作报价单模板图片,小松挖机官方网站报价?
创业网站制作流程,创业网站可靠吗?
Laravel如何实现API资源集合?(Resource Collection教程)
如何在IIS中新建站点并配置端口与IP地址?
北京企业网站设计制作公司,北京铁路集团官方网站?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
linux top下的 minerd 木马清除方法
如何有效防御Web建站篡改攻击?
Android仿QQ列表左滑删除操作
Laravel如何使用Blade组件和插槽?(Component代码示例)
深圳网站制作平台,深圳市做网站好的公司有哪些?
怎么用AI帮你为初创公司进行市场定位分析?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
,交易猫的商品怎么发布到网站上去?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
如何用5美元大硬盘VPS安全高效搭建个人网站?
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
C语言设计一个闪闪的圣诞树
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
C++时间戳转换成日期时间的步骤和示例代码

