一次生产上由于Nginx引起的HTTP请求Header参数丢失的
2020-09-02 本文已影响0人
AbstractCulture
问题描述
在一个第三方SSO的对接环境中,服务端需要拿到当前前端的URL进行重定向,此时出于安全方面的考量,研发组决定把重定向的URL放到HTTP请求中的Header
进行传参,参数的名称为redirect_url,在测试环境跑的时候非常通畅,但是生产环境获取这个redirect_url进行URLEncoder.encode()
操作的时候,出现了NPE异常.
产生问题的原因
在开发环境的时候,由于前端使用node.js进行代理端口,所以并没有什么问题,但是由于生产环境使用的是Nginx进行静态资源压缩,所以HTML页面发起的HTTP请求都是被Nginx所转发的,经过查阅资料发现,Nginx配置的underscores_in_headers
项自动过滤了Header头部的下划线的参数。
解决问题的方案
- 把参数名进行重写,避开拦截规则。比如:redirectUri;
- 将Nginx的
underscores_in_headers
设置为false.
- 将Nginx的
感想
DEV环境和生产环境是会有很多不一样的地方的,对于这些问题的排查要一个个去缩小BUG范围,首先检验前端参数与后端参数是否一一对应,如果前端传值没问题,那么读后端接口进行校验,如果本地测试都没问题,那么看看数据传输的过程中是否有中间件对参数进行了一些过滤。