Spring Cloud 项目出现 Options Forbidden 403 问题解决

个人博客原文:Spring Cloud 项目出现 Options Forbidden 403 问题解决

摘要:本文简述了博主在开发过程中,需要跨域调试的时候,出现了 OPTIONS 请求 Forbidden 的问题,以及解决方法。

问题

options-forbidden

  在使用 Spring Cloud 的项目中,本地跨域调试发现 POST 请求转为了 OPTIONS 请求,并且服务端拒绝访问,其实是 CORS 请求的问题。
  CORS 请求分为2类: 简单请求 和 非简单请求。两者主要的区分点在于:
* 1: 请求方法为 HEAD, GET, POST;
* 2: HTTP 头信息为以下几个: Accept, Accept-Language,Content-Language, Last-Event-ID,Content-Type (值为 application/x-www-form-urlencoded、multipart/form-data、text/plain)。
  只要满足以上两点,则为简单请求;否则为非简单请求。
简单请求的处理方式是浏览器直接发送 CORS 请求。非简单请求的处理方式是浏览器发送预检请求,表示询问服务器当前的域名是否可以访问正常服务器,如果可以访问,则发送正常的请求到服务器;否则报错。
  现在确定遇到的问题就是在 CORS 请求预检的时候发现域名不在服务器端的白名单里面,所以需要修改服务端的请求返回报文。

解决方案

在网关中添加下面的过滤器,在每次请求返回报文中添加报文头,即可正常访问

@Component
public class CorsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        response.setHeader("Access-Control-Expose-Headers", "Location");
        chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig filterConfig) {}

    @Override
    public void destroy() {}

}

参考文章:
跨域资源共享 CORS 详解

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值