HTTP 自定义header有时接收不到,无内容分析

作者: JONE 分类: PHPer 发布时间: 2018-09-10 17:15

原文链接 http://qiaoshi.iteye.com/blog/2147882

出现此问题需满足的条件

  • 您使用了nginx作为反向代理
  • 您自定义header的key中使用了“_”,而不是“-”

原因

//在ngx_http_parse_header_line()函数中
if(ch == ‘_’) {
    if (allow_underscores)
    Unknown macro: {
        hash = ngx_hash(hash, ch);
        r->lowcase_header[i++] = ch;
        i &= (NGX_HTTP_LC_HEADER_LEN -- 1);\
    } else
    Unknown macro: {
        r->invalid_header = 1;
    }

以上代码说明nginx对header name的字符做了限制,默认underscores_in_headers为off,表示如果header name中包含下划线,则忽略掉。

解决办法

  • 您可以将您程序中的“_”都改为“-”
  • 您也可以在nginx配置中设置underscores_in_headers on;