问题:Http带下划线的header丢失

615 阅读1分钟

问题描述

最近在统一java和dotnet的链路传递参数命名,对于http使用header作为传递载体。其中一个传递参数(租户id)命名为__tenant,但是在http请求过程中丢失了。

问题排查过程

  1. 首先怀疑是请求方的问题,通过日志打印。排除请求方代码问题。
  2. 然后查看服务提供方了。一开始是在本地调试服务,本地启动服务后,使用postman请求,header中的__tenant未丢失。排除服务代码问题。
  3. 然后怀疑服务的nginx对header参数进行了过滤,查询相关资料后,果然是nginx的问题。

最终问题定位

nginx的配置中,有一个underscores_in_headers参数,表示是否可以使用带下划线的header,默认为false,表示忽略下划线header。

解决方法

  • 方法1:修改链路参数命名,不使用下划线。
  • 方法2:在nginx中,显示配置underscores_in_headers on

因为涉及到跨系统,修改链路参数不太现实,所以选择了方法2.