前言
最近朋友发现使用nginx转发到后端的请求中带有下划线(_)的header获取不到,之后我对这个事情很感兴趣,特地写了个测试项目来测试一下。
解决方案
在nginx的配置文件中加入
http {
# 其他配置
underscores_in_headers on; # 加入这一行
}
测试过程
- 新建一个SpringBoot项目,然后写一个测试controller用来接收请求
@RestController
public class TestController {
private static final Logger logger = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/test")
public Object test(@RequestHeader Map<String,String> headers)
{
logger.info("headers==>{}", headers);
logger.info("headers数量==>{}", headers.size());
return headers;
}
}
- 运行项目,使用postman给后端直接发送请求
结果如下
-
设置nginx代理(不改underscores_in_headers的设置)
结果如下
可以看到少了一个user_name的头 -
在nginx的配置文件中添加underscores_in_headers,重新加载配置文件,发送请求
结果如下
可以看到在能够获取到带有下划线的header了
测试源码:https://github.com/JohnZuo006/nginx-header-test
后记
如有问题,欢迎指正