美文网首页
nodejs HTTP Headers超长的问题

nodejs HTTP Headers超长的问题

作者: CodingCode | 来源:发表于2020-02-08 08:55 被阅读0次

    这是最近碰到的一个坑。

    现象:服务端返回empty

    直接现象是client端发起HTTP请求之后,得到empty的返回,以curl工具为例,得到如下错误:

    Empty reply from server
    

    Action 1:查查node server端日志,没有

    去查node server端的日志:没有,什么也没有,好像没有收到请求。

    Action 2:查看tcpdump记录,有情况

    使用杀手锏tcpdump:

    image.png

    可以看到奇怪的现象:

    1. 普通的GET请求,不管业务是否正确,都能返回一个HTTP response
    2. PUT(Headers超大的)请求的HTTP request没有对应的response,只有TCP层的ACK

    那么可以确认两点:

    1. Server端确实收到的请求
    2. Server端没有返回HTTP层的response,虽然TCP层可能返回了。

    猜测:肯定是node server出问题了

    Server端收到请求后,并没有向上传送给业务层,导致在server端看不到任何日志,就像没有收到一样;然后Server端直接丢弃了请求,关闭了TCP层的连接。

    正巧的是把完整的request都打出来了,感觉HTTP Headers有点长,都是些什么垃圾消息;网上一阵google找到如下:

    Denial of Service with large HTTP headers (CVE-2018-12121)
    https://nodejs.org/en/blog/vulnerability/november-2018-security-releases/#denial-of-service-with-large-http-headers-cve-2018-12121

    经过验证,删除不必要的Headers,一切恢复OK。

    结论:node本身的bug

    是Headers的大小不能超过8K字节。而且我们使用的node版本还不支持--max-http-header-size去修改大小。

    相关文章

      网友评论

          本文标题:nodejs HTTP Headers超长的问题

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