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 相关文章推荐
js+FSO遍历文件夹下文件并显示
Mar 07 Javascript
基于jquery的滚动新闻列表
Jun 19 Javascript
实现动画效果核心方式的js代码
Sep 27 Javascript
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
javascript跨域原因以及解决方案分享
Apr 08 Javascript
多种JQuery循环滚动文字图片效果代码
Jun 23 Javascript
浅谈如何实现easyui的datebox格式化
Jun 12 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
May 15 Javascript
angular.js实现购物车功能
Oct 23 Javascript
Vue.js实现表格渲染的方法
Sep 07 Javascript
Vue利用History记录上一页面的数据方法实例
Nov 02 Javascript
es6 super关键字的理解与应用实例分析
Feb 15 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
windows平台中配置nginx+php环境
2015/12/06 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
JavaScript 内置对象属性及方法集合
2010/07/04 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
python实现根据图标提取分类应用程序实例
2014/09/28 Python
python实现用户登录系统
2016/05/21 Python
深入理解python try异常处理机制
2016/06/01 Python
python requests指定出口ip的例子
2019/07/25 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
结束运行python的方法
2020/06/16 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
物流专业大学应届生求职信
2013/11/03 职场文书
水务局局长岗位职责
2013/11/28 职场文书
应届毕业生求职信
2013/11/30 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
典型事迹材料范文
2014/12/29 职场文书
收银员岗位职责
2015/02/03 职场文书
openstack云计算keystone组件工作介绍
2022/04/20 Servers