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 相关文章推荐
window.location和document.location的区别分析
Dec 23 Javascript
jquery构造器的实现代码小结
May 16 Javascript
js加强的经典分页实例
Mar 15 Javascript
初识SmartJS - AOP三剑客
Jun 08 Javascript
JavaScript中document对象使用详解
Jan 06 Javascript
javascript引用类型指针的工作方式
Apr 13 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
Mar 28 Javascript
浅析如何利用angular结合translate为项目实现国际化
Dec 08 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
Aug 01 Javascript
layui中select,radio设置不生效的解决方法
Sep 05 Javascript
微信小程序入门之指南针
Oct 22 Javascript
vue组件是如何解析及渲染的?
Jan 13 Vue.js
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
php 分页函数multi() discuz
2009/06/21 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
Python subprocess模块常见用法分析
2018/06/12 Python
Python编写打字训练小程序
2019/09/26 Python
Python解析多帧dicom数据详解
2020/01/13 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
Python grpc超时机制代码示例
2020/09/14 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
应届生煤化工求职信
2013/10/21 职场文书
村委会换届选举方案
2014/05/03 职场文书
综治目标管理责任书
2015/05/11 职场文书
公司岗位说明书
2015/10/08 职场文书
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸