背景:
公司项目用户账号密码登录,需要图形验证码,生成图形验证码的思路是
1:前端请求后台接口,获取图形验证码
2:后端生成验证码,并生成一个随机uuid,以uuid为key,code为值存入redis,后端以流的形式把生成的图形验证码写给前端,uuid放入响应头给前端
response.addHeader("CAPTCHA_CODE", uuid);
验证码校验思路:
1:用户输入验证码,前端发起get请求,code为参数,并带上获取验证码时后端返回的响应头
本地测试好使,放到测试环境出问题了,后端死活拿不到请求头....
解决思路:
1:首先觉得是预检请求的问题,于是后端加拦截器,拦截预检请求 结果:不行
2:打印收到的请求头,发现请求头上并没有东西,怀疑是网关过滤掉了,于是,,加日志,,排查,,然并卵 结果:不行
3:后来我想,不如换一种思路,改成post请求,校验时把请求头上的参数放在参数里,
绝对可以 结果:代码改完了还没测,发现问题了
4:本地没问题,为什么发布之后就有问题,不是跨域问题,那就是环境问题,
第一个要检查的就是nginx,因为本地没有nginx,服务器上有
结果:解决!!!
nginx里面有个underscores_in_headers 配置,默认是off,这个配置是默认忽略掉请求header里
面的"_"的,改成on即可,或者把请求头里别用"_"!!!!
破问题耽误一天时间!!!