业务场景
http请求中除了一些公共header,我们还可以定义一些其他header:如token、移动端的唯一设备id、一些自己业务的基础属性如用户id、城市id等等。
- 基于此可以根据设备、用户、点击链路做出用户行为分析,优化当前的产品,甚至是用在广告的个性化推荐上;
- 服务端可以基于这些基本信息对每个行为做日志记录;
问题及定位
客户端通过head传递有下划线的参数,使用nginx做代理转发,nginx服务器默认会对http请求中带下划线的header做过滤丢失不会透传。
因为CGI(公共网关接口Common Gateway Interface,CGI是Web
服务器运行时外部程序的规范)的历史遗留问题如下,大概意思就是 下划线和中划线都为会被映射为 CGI
系统变量中名中的下划线,这样容易引起混淆。
解决方法
1.个人比较推荐这种方式。常见的header变量都是遵循这种方式,例如:Content-Type,Content-Length,Accept-Ranges等。
2.在nginx里的nginx.conf配置文件中的http部分中添加如下配置:
http
{
xxx;
underscores_in_headers on;
}
然后
nginx -s reload