现象:
在本地可以正常获取前端header传的参数,但是部署到服务器后无法获取前端传的请求header(服务器地址使用nginx做了代理转发)
原因:
nginx对header name的字符做了限制,默认 underscores_in_headers 为off,表示如果header name中包含下划线,则忽略掉,部署之后就获取不到。
解决:
1、在header里不要用 “_” 下划线,可以用驼峰命名或者其他的符号(如减号-)代替。nginx默认忽略掉下划线可能有些原因。
2、在nginx里的 nginx.conf文件中配置http的部分添加 : underscores_in_headers on;(默认值是off)
网上找到了下面一段nginx源码,有对下划线进行检测处理:
变量:allow_underscores,是否允许下划线
ngx_http_parse_header_line(ngx_http_request_t *r, ngx_buf_t *b,ngx_uint_t allow_underscores)
if (ch == '_') {
if (allow_underscores) {
hash = ngx_hash(0, ch);
r->lowcase_header[0] = ch;
i = 1;
} else {
r->invalid_header = 1;
}
break;
}