OPSTIONS请求引发的跨域问题

一、 前言

  • 在写分布式压测平台前端部分定义了一个接口:/api/pressure/addPressssureConfig ,由于该接口的特殊性,我的前端部分采用axios框架,自己设置了请求头
    在这里插入图片描述
  • 当我开始前后端联调的时候框架发出了OPSTIONS请求,而非我预期的正常POST请求,而OPSTIONS请求是不会携带Cookie的,所以OPSTIONS请求在后端拦截器处理必然失败,导致浏览器报跨域问题
    在这里插入图片描述
    在这里插入图片描述

二、解决方案

分析

  • 后面查了相关文章,axios框架如果自己设置请求头,框架会先发出OPSTIONS请求,若请求失败,后续请求不会发出,若正常会发出真正自己定义的请求
  • OPSTIONS请求不会携带Cookie,所以后端拦截器会处理失败

可以理解OPSTIONS请求为试探性请求

解决

  • 后端拦截器,对OPSTIONS请求进行处理
public class IdentityInterceptor extends HandlerInterceptorAdapter {

    private static final String METHOD = "OPTIONS";

    //进入controller层之前进行拦截
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    	//对于OPSTIONS请求放行,可自行额外添加校验条件
        if (METHOD.equals(request.getMethod())){
            return true;
        }
       .....
    }

    //controller层处理完之后拦截
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        ......
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        ......
    }
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值