Java 接口请求头Header数据被吞 token值丢失部分字符 接口丢失参数 接口丢失请求头部分参数值

1. 现象: 小程序上线之后出现 次日偶发跳转重新登录页面

2. 场景描述: token 缓存为15日

                       偶发性,只有我和测试出现,次日登陆小程序 出现 token过期,跳转登陆页面

                        登陆之后短时间之内没有出现问题

3. 排查:

            1.首先把log补全了, 网关打印log,接口打印log

            2. nginx 请求log 有url 参数,但是没有请求头的信息

            3. 也查看了一些小程序的缓存时间,是否有自动删除策略,答案是并没有,小程序不会删除,我自己也没有删除小程序的缓存。不是这个问题

4. 找到问题:

                1. 通过打印log ,一开始我是在idea 打印的服务器日志log....找到问题token串被吞10个字符

                2. 找到前端,询问代码。前端代码并没有问题。再次查看log,复制的正常串,以为是idea 的问题。。。(其实并不是,idea没有吞串,就是有问题)

                3. 此时笔者还想到一个方案(前端发版,将拦截器 出现token 过期接口代码处,将错误信息,当时的地址,路由,请求头,参数。新增一个接口,将错误信息发送到服务器。嗯.被否决,不能通过频繁发版解决问题...)

                4. 继续完善了下打印信息的log,才将问题确定,即 token 出现问题,被吞掉10个字符,此时已经确定的是,前端没有问题,后端网关也没有问题,将问题缩小到nginx 转发上。百度搜索,nginx 请求头信息丢失,发现关键处

                5. 由于是nginx 转发。请求头中的token 含有下划线。转发时下划线_ 并没传输所致

# 有问题的串
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjczLCJyblN0ciI6Ilh5U2hJYm5xMjdyakpQWjlVZpVnVKd1BnIn0.YkKAd9C2BSjnjjcAludigzO7stviLjbTF4_dq6xToVU

# 正常串
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjczLCJyblN0ciI6Ilh5U2hJYm5xMjdyakpQWjlValpvZVl0UXZpVnVKd1BnIn0.YkKAd9C2BSjnjjcAludigzO7stviLjbTF4_dq6xToVU

5. 解决问题:

                    nginx 配置文件中 添加配置参数,将下划线校验去除,解决问题

                        

http{

    
       ***
       #1. 复制到http 下 去除下划线限制,并重启nginx.. 重启前建议./nginx -t 验证下配置是否可行 
	   underscores_in_headers on;         

       ***

}

     

6. 总结:

         1. 多打印log

         2. 细心很重要

         3. 整个请求链路,通顺,解决问题更快

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值