完美解决axios跨域请求出错的问题


Posted in Javascript onFebruary 05, 2018

错误信息:

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access. The response had HTTP status code 403

随着前端框架的发展,如今前后端数据分离已经成了趋势,也就是说,前端只需要用ajax请求后端的数据合成页面,后端仅仅提供数据接口,给数据就行,好处就是前端程序员再也不用在自己的本地搭建Web服务器,前端也不需要懂后端语法,后端也不需要懂前端语法,那么简化了开发配置,也降低了合作难度。

常规的GET,POST,PUT,DELETE请求是简单请求(相对于OPTIONS请求),但是OPTIONS有点儿特别,它要先发送请求问问服务器,你要不要我请求呀,要我就要发送数据过来咯(这完全是根据自己的理解写的,如果有误,敬请谅解,请参考阮一峰大神原文。)

在Vue的项目里,Http服务采用Axios,而它正是采用OPTIONS请求。

如果仅仅在header里面加入: 'Access-Control-Allow-Origin':*,是并不能解决问题的,错误就是如文章开头所示。

这儿就需要后台对OPTIONS请求额外处理。

本文以Spring MVC为例:

添加一个拦截器类:

public class ProcessInterceptor implements HandlerInterceptor {

  @Override
  public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
    httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
    httpServletResponse.setHeader("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
    httpServletResponse.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    httpServletResponse.setHeader("X-Powered-By","Jetty");

    String method= httpServletRequest.getMethod();
    if (method.equals("OPTIONS")){
      httpServletResponse.setStatus(200);
      return false;
    }
    System.out.println(method);
    return true;
  }
  @Override
  public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
  }
  @Override
  public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
  }
}

在spring-mvx.xml配置Spring 拦截器:

<mvc:interceptors> 
    <bean class="cn.tfzc.ssm.common.innterceptor.ProcessInterceptor"></bean> 
  </mvc:interceptors>

至此,问题已经解决:

完美解决axios跨域请求出错的问题

以上这篇完美解决axios跨域请求出错的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript网页关键字高亮代码
Jul 30 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
Oct 22 Javascript
js触发onchange事件的方法说明
Mar 08 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
Mar 31 Javascript
Bootstrap 布局组件(全)
Jul 18 Javascript
ES6扩展运算符用法实例分析
Oct 31 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
Dec 05 Javascript
angular中如何绑定iframe中src的方法
Feb 01 Javascript
小程序云函数调用API接口的方法
May 17 Javascript
更强大的vue ssr实现预取数据的方式
Jul 19 Javascript
vue+ts下对axios的封装实现
Feb 18 Javascript
详解 TypeScript 枚举类型
Nov 02 Javascript
vue 页面加载进度条组件实例
Feb 05 #Javascript
JS设计模式之状态模式概念与用法分析
Feb 05 #Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 #Javascript
vue实现图片加载完成前的loading组件方法
Feb 05 #Javascript
JS设计模式之策略模式概念与用法分析
Feb 05 #Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 #Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
Feb 05 #Javascript
You might like
php中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
2019/03/21 PHP
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
python&amp;MongoDB爬取图书馆借阅记录
2016/02/05 Python
Python中装饰器学习总结
2018/02/10 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
2014年国庆标语
2014/06/30 职场文书
个人债务授权委托书
2014/10/17 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
导游词之山海关
2019/12/10 职场文书
sql server 累计求和实现代码
2022/02/28 SQL Server