当前位置: 首页 > news >正文

Angular 应用解决跨域访问的问题

在前后台分离的应用中,Angular 与 Java 是一对好搭档。但是如果是分开部署应用,则势必会遇到跨域访问的问题。

什么是跨域

启动应用之后,有些浏览器会提示如下告警信息:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. 

这个是典型的跨域问题。浏览器为了安全考虑,不同的域之间是不能够互相访问的的。

比如,Angular 应用部署在本地的4200端口,而 Java 服务部署在8080端口,他们虽然是同台机子,但仍然是不同的域。Angular 应用视图通过HttpClient 去访问 Java 的 http://localhost:8080/hello 接口是不允许的。

如何解决跨域问题

在知道了什么是跨域之后,解决方案就有多种。

1. 避免跨域

既然,分开部署导致了跨域,那么最简单的方式莫过于避免分开部署,即Angular 与 Java 同时部署到同个 Web 服务器中。

这种方式部署在传统的 Java Web 中非常常见。比如,JSP 应用。

但带来的问题是,水平扩展和性能调优将变得困难,不适合大型互联网应用。

2. 安装支持跨域请求的插件

其实,很多浏览器都提供了允许跨域访问的插件,只需启用这种插件,就能实现在开发环境跨域请求第三方 API 了。

下图展示的是在 Firefox 浏览器中能够实现的跨域访问的插件。

实现的跨域访问的插件

这种方式是最简单,但使用的场景比较受限,一般用于开发环境。

3. 设置反向代理

这种方式是业界最为常用的方式,原理是设置反向代理服务器,让 Angular 应用都访问自己的服务器中的API,而这类API都会被反向代理服务器转发到 Java 服务API中,而这个过程对于 Angular 应用是无感知的。

业界经常是采用 NGINX 服务来承担反向代理的职责。而在 Angular 中,使用反向代理将变得更加简单。在 Angualr 应用的根目录下,添加配置文件proxy.config.json,并填写如下格式内容:

{
    "/lite": {
      "target": "http://localhost:8080",
      "secure": "false"
    }
}

使用 Angular CLI 启动应用时,只需要执行如下命令即可,非常方法:

ng serve --proxy-config proxy.config.json

这样,当 Angular 要访问http://localhost:4200/lite> 时,会被转发到 Java 的 接口。

参考引用

  • 原文同步至https://waylau.com/angular-proxy/
  • Angular CLI 常用命令:https://waylau.com/angular-cli-commands/
  • Spring 5 开发大全:https://github.com/waylau/spring-5-book
  • 跟老卫学Angular:https://github.com/waylau/angular-tutorial
  • NGINX 教程:https://github.com/waylau/nginx-tutorial

相关文章:

  • 用navicat远程连接mysql:Can't connect to MySQL server (10060)
  • 工具-cloc代码行数统计工具
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • GoAccess中文界面显示配置
  • Phpstorm Alt+Enter 自动导入类
  • 让你的系统“坚挺不倒”的最后一个大招——「降级」
  • Arch Linux开启SSH远程安装(1.5)
  • JVM调优后续(一)
  • ES6模块之export和import教程
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • ERLANG 网工修炼笔记 ---- UDP
  • 10.Spring入门笔记
  • css 单选按钮图标替换
  • CF724E Goods transportation
  • Binomial Coefficient(二项式系数)
  • 时间复杂度分析经典问题——最大子序列和
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 2019年如何成为全栈工程师?
  • Android优雅地处理按钮重复点击
  • laravel 用artisan创建自己的模板
  • Linux链接文件
  • miaov-React 最佳入门
  • opencv python Meanshift 和 Camshift
  • Python 基础起步 (十) 什么叫函数?
  • Solarized Scheme
  • vue-loader 源码解析系列之 selector
  • 测试开发系类之接口自动化测试
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 原生Ajax
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • (02)Hive SQL编译成MapReduce任务的过程
  • (14)Hive调优——合并小文件
  • (ZT)出版业改革:该死的死,该生的生
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (排序详解之 堆排序)
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (生成器)yield与(迭代器)generator
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET NPOI导出Excel详解
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .Net程序帮助文档制作
  • [1127]图形打印 sdutOJ
  • [2010-8-30]
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [C/C++] C/C++中数字与字符串之间的转换
  • [CF407E]k-d-sequence
  • [exgcd] Jzoj P1158 荒岛野人
  • [GXYCTF2019]禁止套娃
  • [hdu 3746] Cyclic Nacklace [kmp]
  • [HNOI2010]BUS 公交线路
  • [JDK工具-2] javap 类文件解析工具-帮助理解class文件,了解Java编译器机制