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数组处理代码详解(含实例演示)
Feb 03 Javascript
jquery获取一组checkbox的值(实例代码)
Nov 04 Javascript
js点击button按钮跳转到另一个新页面
Oct 10 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
Apr 26 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
Jul 01 Javascript
基于jQuery实现响应式圆形图片轮播特效
Nov 25 Javascript
非常漂亮的相册集 使用jquery制作相册集
Apr 28 Javascript
Angularjs分页查询的实现
Feb 24 Javascript
Vue计算属性的学习笔记
Mar 22 Javascript
详解Node.js开发中的express-session
May 19 Javascript
layui前端框架之table表数据的刷新方法
Aug 17 Javascript
微信小程序tabBar设置实例解析
Nov 14 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
php防止sql注入简单分析
2015/03/18 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
2017/05/11 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
Python实现二维数组输出为图片
2018/04/03 Python
通过实例了解python property属性
2019/11/01 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
计算机专业优秀大学生自我总结
2014/01/21 职场文书
工程采购员岗位职责
2014/03/09 职场文书
大学生就业意向书范文
2014/04/01 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js