今天测试接口时发现本地请求正常,部署后死活都不行,在header中带有2个xxx_token和xxx_ip的参数在后端接收不到,在想是不是内容过长导致接收不到,打印了日志发现根本没有,说明根本没有到这一步,那就应该是出现在nginx上,网上搜了一下,确实是nginx为了避免和他自己的参数造成混淆,默认是过滤了header参数的下划线,导致后端接收不到。
其实,在herader命名中使用下划线其实是可以的也是符合 HTTP 标准的。Nginx之所以要默认禁止使用是因为 CGI 历史遗留问题。下划线会被映射为 CGI 系统变量名中的下划线,这样容易引起混淆。
所以要在nginx的配置文件中加入:
#不过滤header中带有下划线参数
underscores_in_headers on;
该选项默认是关闭的,所有包含下划线的字段名都会被丢弃,所以一般无特殊需要建议header参数不使用下划线。