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中IE浏览器不支持NEW DATE()带参数的解决方法
Mar 01 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
Mar 21 Javascript
通过action传过来的值在option获取进行验证的方法
Nov 14 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
Jan 15 Javascript
js构造函数、索引数组和属性的实现方式和使用
Nov 16 Javascript
分享我对JS插件开发的一些感想和心得
Feb 04 Javascript
Flask中获取小程序Request数据的两种方法
May 12 Javascript
React简单介绍
May 24 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 Javascript
javascript自定义日期比较函数用法示例
Jul 22 Javascript
layui多图上传实现删除功能的例子
Sep 23 Javascript
Vue仿百度搜索功能
Dec 28 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生成缩略图的代码
2011/01/12 PHP
使用php验证复选框有效性的示例
2013/11/13 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
php session的锁和并发
2016/01/22 PHP
JavaScript高级程序设计
2006/12/29 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
python解析模块(ConfigParser)使用方法
2013/12/10 Python
python新手经常遇到的17个错误分析
2014/07/30 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
简单了解python PEP的一些知识
2019/07/13 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
python不同系统中打开方法
2020/06/23 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
绩效工资实施方案
2014/03/15 职场文书
普通党员整改措施
2014/10/24 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
小学重阳节活动总结
2015/03/24 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书
房产遗嘱范本
2015/08/06 职场文书
Python合并pdf文件的工具
2021/07/01 Python
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技