美文网首页restful实践
nginx做转发时,带下划线字段的header内容丢失

nginx做转发时,带下划线字段的header内容丢失

作者: 零一间 | 来源:发表于2021-06-10 19:09 被阅读0次

    背景

    在日常的开发中,我们有时候会在http请求头中设置一些自定义的字段,比如这种格式x_token, x_ticket, x_uid, x_version,app_id等,这些字段中都含有下划线。 但后端程序获取头部信息时,会取不到对应的值。

    场景复现x_test 去哪儿了?

    www@SD-20200928IIIF:~$ curl --location --request GET 'http://localhost/test/header/get-header.php' \
    > --header 'x_test: xxxxx' \
    > --header 'y-test: yyyyy'
    {
        "post": [],
        "header": {
            "y-test": "yyyyy",
            "user-agent": "curl\/7.68.0"
        }
    }
    

    原因:

    其实nginx对header name的字符做了限制,默认 underscores_in_headers 为off。

    当是off的时候,忽略在客户端请求头字段中设置的下划线参数。名称包含下划线的请求标头字段将被标记为无效,并受ignore_invalid_headers指令的约束 。

    之所以为off,其实官方也是不推荐采用下划线方式的。

    解决办法

    方法一:

    header中自定义变量名时不要用下划线
    

    个人比较推荐这种方式。常见的header变量都是遵循这种方式,例如:Content-Type,Content-Length,Accept-Ranges等。

    方法二:

    在nginx.conf中加上underscores_in_headers on配置

    http {
        ...
        underscores_in_headers on;
    }
    

    相关文章

      网友评论

        本文标题:nginx做转发时,带下划线字段的header内容丢失

        本文链接:https://www.haomeiwen.com/subject/xbqleltx.html