问题描述
前后端分离项目使用token进行登录及接口校验,出现在后端拦截器中无法获取前端请求头中的token值,导致所有前端请求校验无法通过
导致该问题的原因
浏览器在发送请求时会默认先发送一次类型为’option’且不带任何参数的请求,请求成功后才会发送真正的Post或者get请求,简单说明一下什么是option请求:
跨域请求中,options请求是浏览器自发起的preflight request(预检请求),以检测实际请求是否可以被浏览器接受。
preflight request请求报文中有两个需要关注的首部字段:
(1)Access-Control-Request-Method:告知服务器实际请求所使用的HTTP方法;
(2)Access-Control-Request-Headers:告知服务器实际请求所携带的自定义首部字段。
而在后台拦截器中通常只处理了post或者get类型的请求,而没有对option类型的请求做处理,因此前端发送的预检请求无法通过后端的拦截器,导致真正的Post(get)请求无法发送
解决办法
后端拦截器添加处理option类型的请求的方法,保证预检请求通过后则可以正常的获取前端请求头中的token值