背景
今天在项目调试中,需要在拦截器里获取前端请求头里的token,结果死活获取不到。debug了半天发现前端一共发送了两次请求,真正的请求的第二次。
OPTIONS请求
OPTIONS请求方法的主要用途有两个:
1、获取服务器支持的HTTP请求方法;也是黑客经常使用的方法。
2、用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。
总之,OPTIONS请求相当于一个检测目标是否安全的操作,类似于心跳机制。所以我们在后台拦截器里面应该把这个请求过滤掉。
1 2 3 4 5 6 7 8 | public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { if("OPTIONS".equals(httpRequest.getMethod())){ filterChain.doFilter(httpRequest, httpResponse); return; } } |
如上,如果检测到请求方法是options,则直接通过,接下来会得到真正的请求。