一次生产上由于Nginx引起的HTTP请求Header参数丢失的问题

问题描述

在一个第三方SSO的对接环境中,服务端需要拿到当前前端的URL进行重定向,此时出于安全方面的考量,研发组决定把重定向的URL放到HTTP请求中的Header进行传参,参数的名称为redirect_url,在测试环境跑的时候非常通畅,但是生产环境获取这个redirect_url进行URLEncoder.encode()操作的时候,出现了NPE异常.

产生问题的原因

在开发环境的时候,由于前端使用node.js进行代理端口,所以并没有什么问题,但是由于生产环境使用的是Nginx进行静态资源压缩,所以HTML页面发起的HTTP请求都是被Nginx所转发的,经过查阅资料发现,Nginx配置的underscores_in_headers项自动过滤了Header头部的下划线的参数。

解决问题的方案

    1. 把参数名进行重写,避开拦截规则。比如:redirectUri;
    1. 将Nginx的underscores_in_headers设置为false.

感想

DEV环境和生产环境是会有很多不一样的地方的,对于这些问题的排查要一个个去缩小BUG范围,首先检验前端参数与后端参数是否一一对应,如果前端传值没问题,那么读后端接口进行校验,如果本地测试都没问题,那么看看数据传输的过程中是否有中间件对参数进行了一些过滤。

你可能感兴趣的:(一次生产上由于Nginx引起的HTTP请求Header参数丢失的问题)