一.问题描述
最近在改一个之前的基于laravel的项目代码,整理后台接口提供给前端,之前的代码全部在同服务器,现在前后端分离,前端这边需要本地调用远端接口进行数据调试。先简单使用中间件实现了前端js的跨域处理,可是最近在处理登录的token验证的时候发现,带上自定义header头之后,浏览器又提示我访问被拦截了,很尴尬。
二.解决思路
首先考虑的是不是前端这边请求的问题,因为在F12调试窗口发现请求方式和线上的请求头不一致,参考文章
js设置自定义header并且本地做了一个demo测试发现可以自定义请求头,然后用demo去嘲讽前端进行调试,不过我的成功是由于请求的本地服务器地址,换成线上地址又挂了。
所以基本可以考虑是服务器这边拒绝了请求,还是要继续从后端这边找原因,首先找的通用解决方案,大概意思是自定义header头的请求会先发送一个options的请求给后端。后端检查后确认可以请求,才会发送真实的post/get请求(我不知道这个说法对不对,我是这么理解,后面有大佬的详解),所以就是服务器端需要对跨域的option请求做一个200的返回处理。
在之前的中间件中添加了自定义header头字段,也处理了options请求处理,但是依然不生效。脑壳痛,再次求助大神,发现了这一篇文章,是我找到的说的比较详细又提供了laravel内的解决方案的文章(我选用的中间件方案,并不是文章开头的解决方案),非常感谢。