Nginx无法获取带下划线的请求头数据问题

2021-04-19 13:58:39  晓掌柜  版权声明:本文为站长原创文章,转载请写明出处


一、前言


    1.1、背景

        今天在开发中有这样一个请求:前端需要在http请求中携带参数,后端获取参数进行解析并进行后续操作。

    1.2、运行环境

        前后端分离

        前端:Nuxt + axios

        后端:Springboot + dubbo

    1.3、遇到问题

        在线下环境进行测试的时候一切都是可以的,但是部署到线上环境却发现无法获取请求头中的参数信息


二、问题排查


    2.1、线上项目是否正常

        ① 从代码版本来看,线上和线下都是一致

        ② 运行环境一致

        ③ 除新功能外,项目其他部分运行正常

    2.2、PostMan进行请求测试

        以一个数据查询的功能为切入点,进行接口调试然后发现:

            能正常获取请求头中的参数!

    2.3、比较线上和线下异同

        ① 线下是本地运行,连接测试库

        ② 线上是云服务器运行,连接正式库

        ③ 线上有使用到Nginx反向代理


三、问题分析


    3.1、问题基本定位-Nginx

        首先线上接口是OK,调试也正正常通。那么很大可能是前后端联调出的问题。于是我又运行本地的前端项目联调线上接口发现也是不行的。

    到这里的话,问题已经很清晰了:线上项目有经过Nginx进行反向代理,那大概率就是Nginx这个环节出现问题了。

    3.2、相关查询

        ① 从Nginx日志中发现如下:

            信息:client sent invalid header line: “access_token: XXX” while reading client request headers

            到这里已经很明确了,就是Nginx不能识别请求头中的access_token

        ② 网上查询相关资料

            Nginx中关于:underscores_in_headers on; 

            的配置是默认关闭的,于是不能识别到accessToken


四、问题解决

    

    4.1、修改Nginx配置

        在server模块中配置:underscores_in_headers on; 


    4.2、修改请求头传递参数

        access_token 修改为 accessToken


五、后记


    另外记录下遇到的其他问题:

        ① Dubbo中不能序列化HttpServletRequest,需要再消费者的业务实现类中进行数据获取,然后传递给生产者。

    没有什么技术含量,流水账罢了...

    更多精彩请持续关注:www.guangmuhua.com


最新评论: