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 相关文章推荐
javascript 写类方式之八
Jul 05 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
Mar 09 Javascript
打造自己的jQuery插件入门教程
Sep 23 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
Jan 16 Javascript
微信小程序promsie.all和promise顺序执行
Oct 27 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
Dec 15 Javascript
vue中v-model的应用及使用详解
Jun 27 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
使用Node.js在深度学习中做图片预处理的方法
Sep 18 Javascript
JavaScript 严格模式(use strict)用法实例分析
Mar 04 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
一个颜色轮换的简单例子
2006/10/09 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
让你的网站可编辑的实现js代码
2009/10/19 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
angular6的响应式表单的实现
2018/10/10 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
详解Python中的join()函数的用法
2015/04/07 Python
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
Python排序算法实例代码
2017/08/10 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
请说出几个常用的异常类
2013/01/08 面试题
传播学毕业生求职信
2013/10/11 职场文书
寄语十八大感言
2014/02/07 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
百年校庆节目主持词
2014/03/27 职场文书
网站客服岗位职责
2014/04/05 职场文书
医院院务公开实施方案
2014/05/03 职场文书
公司车辆管理制度
2015/08/04 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python