关于nginx请求头中有下划线_的坑

1,前言

风平浪静的下午,一个前端开发同事找到我,说感觉好像nginx那边有一些转发并没有到达后端。

我问,怎么了?

她说的也非常具体,第一是常规访问服务,然后返回的状态是401,提示令牌失效(Token Invalid )。接着直接访问后端所代理的服务,然后就是正常的。

哦,听上去很明显啦,事儿就是到nginx这里卡住了呗。我问她详细的情况是怎样的?

她说获取验证码以及登陆都是没有问题的,但是就是这里的token没有传过去,token是放在请求头里边的,这个头的名称是“old_token”。

听上去一切好像都没什么问题,而这个问题也确实是我第一次遇到的,后来求助百度,在某篇文章里找到了答案,这里粘贴过来,以存记录。

2,解决

原本在测试环境测试通过的APP,今天准备切到线上环境做最后测试,结果发现了错误。查看日志发现是APP端发送的http请求中的header内容丢失了。那么代码没有改动,怎么平白无故会丢失头信息?

于是想到两个环境的不同之处在于线上是通过nginx做的代理转发,会不会是nginx搞的鬼?于是搜索“nginx request header 丢失”,果不其然是这个问题,nginx对下划线的头信息做了限制,找到问题所在就等于完成了一大半,办法总比困难多。遂决定记录之。

2.1不用下划线

既然nginx对下划线不支持,那没关系,不用下划线就是了。比如原来old_token改成old-token就可以了。(难怪一般header的name都是-来拼接的,比如User-Agent)

2.2从根本上解除nginx的限制

nginx默认request的header的那么中包含_时,会自动忽略掉。

解决方法是:在nginx里的nginx.conf配置文件中的http部分中添加如下配置:

underscores_in_headers on;

默认 underscores_in_headers 为off。

我们采取了第一种方法,她更改了一下请求头的名称,果然这个问题就解决了。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值