Angular客户端请求Rest服务跨域问题的解决方法


Posted in Javascript onSeptember 19, 2017

1.问题描述:通过Origin是http://localhost:4200请求http://localhost:8081的服务,控制台报错如下,但是Response为200。客户端和服务端IP相同,但是端口不同,存在跨域问题。

XMLHttpRequest cannot load http://localhost:8081/api/v1/staffs. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.

2.解决方法:在服务端/api/v1/staffs的Restful方法增加@CrossOrigin注解,比如:

@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping(value = "/api/v1/staffs", produces = { "application/json" }, method = RequestMethod.GET)
RestResponseList<?> queryStaffs(@RequestParam(value = "limit", required = false, defaultValue = "20") int limit,
 @RequestParam(value = "offset", required = false, defaultValue = "0") int offset);

3.重新发送请求http://localhost:8081/api/v1/...,请求成功。且响应头增加了Access-Control-Allow-Credentials和Access-Control-Allow-Origin参数。@CrossOrigin注解即是给响应头增加了这两个参数解决跨域问题。

Angular客户端请求Rest服务跨域问题的解决方法

4.在服务端POST方法同样使用注解@CrossOrigin解决跨域问题。

@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping(value = "/api/v1/staffs", produces = { "application/json" }, method = RequestMethod.POST)
RestResponse<?> createStaff(@RequestBody RestRequest<StaffReqInfo> request);

报错如下:

Angular客户端请求Rest服务跨域问题的解决方法

5.查看响应码415,错误原因:

"status": 415,
"error": "Unsupported Media Type",
"exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
"message": "Content type 'text/plain;charset=UTF-8' not supported"

6.进一步查看请求头信息,content-type为text/plain。与Response Headers的Content-Type:application/json;charset=UTF-8类型不匹配,故报错。

Angular客户端请求Rest服务跨域问题的解决方法

7.指定请求头content-type为application/json,比如在Angular中增加Headers。发送Post请求,请求成功。

let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers });

return this.http.post(this.staffCreateURL, body, options).map((response: Response) => {
 //return this.http.get(this.userLoginURL).map((response:Response)=> {
 let responseInfo = response.json();
 console.log("====请求staffCreateURL成功并返回数据start===");
 console.log(responseInfo);
 console.log("====请求staffCreateURL成功并返回数据end===");
 let staffName = responseInfo.responseInfo.staffName;
 console.log(staffName);
 return responseInfo;
})

另:也可以在HttpServletResponse对象通过setHeader("Access-Control-Allow-Origin", "*")方法增加响应头参数,解决跨域问题,即是@CrossOrigin注解方式。推荐使用注解,方便。

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

Javascript 相关文章推荐
网络图片延迟加载实现代码 超越jquery控件
Mar 27 Javascript
js 内存释放问题
Apr 25 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
Sep 02 Javascript
js实现回放拖拽轨迹从过程上进行分析
Jun 26 Javascript
js读取并解析JSON类型数据的方法
Nov 14 Javascript
浅析Bootstrap缩略图组件与警示框组件
Apr 29 Javascript
详解JS中的立即执行函数
Feb 24 Javascript
JS实现队列的先进先出功能示例
May 10 Javascript
slideToggle+slideup实现手机端折叠菜单效果
May 25 Javascript
jQuery:unbind方法的使用详解
Aug 14 jQuery
史上最全JavaScript常用的简写技巧(推荐)
Aug 17 Javascript
vue中将html字符串转换成html后遇到的问题小结
Dec 10 Javascript
jQuery实现可兼容IE6的遮罩功能详解
Sep 19 #jQuery
jQuery选择器之表单元素选择器详解
Sep 19 #jQuery
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 #Javascript
原生javascript实现的全屏滚动功能示例
Sep 19 #Javascript
Vue结合SignalR实现前后端实时消息同步
Sep 19 #Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
Sep 19 #Javascript
vue实现页面加载动画效果
Sep 19 #Javascript
You might like
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
php数据序列化测试实例详解
2017/08/12 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
浅谈Python中的数据类型
2015/05/05 Python
Python实现线程池代码分享
2015/06/21 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
Python自定义简单图轴简单实例
2018/01/08 Python
python实现ID3决策树算法
2018/08/29 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
Python中内建模块collections如何使用
2020/05/27 Python
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
Java如何获得ResultSet的总行数
2016/09/03 面试题
应届大学生自荐信格式
2013/09/21 职场文书
竞聘书格式及范文
2014/03/31 职场文书
新教师培训方案
2014/06/08 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
公积金接收函格式
2015/01/30 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
详解 TypeScript 枚举类型
2021/11/02 Javascript
手写实现JS中的new
2021/11/07 Javascript