美文网首页收藏
【HTTP】http header 过大导致前端无法请求问题排查

【HTTP】http header 过大导致前端无法请求问题排查

作者: Bogon | 来源:发表于2022-03-06 10:39 被阅读0次

    在学习 HTTP 协议的时候,除了阅读 RFC2616 等 RFC 文档,还可以参考 MDN(Mozilla Developer Network),因为是有中文版的,所以对我们更加友好。

    我们回到 HTTP 502 的语义本身,看看我们在说 502 的时候,我们说的到底是什么。
    这是 RFC2616 中针对502 Bad Gateway所给出的定义:

    502 Bad Gateway
       The server, while acting as a gateway or proxy, received an invalid
       response from the upstream server it accessed in attempting to fulfill the request.
    
    作为网关或者代理的服务器,在试图从它的上游服务器(后端服务器)执行 HTTP 请求时,接收到了一个无效的响应。
    

    云 LB认为,后端返回的 HTTP 响应并不符合它对于“有效”的定义。但是,显然后端回复的 HTTP 200 怎么看都是正常的、标准的,那 云 LB又有什么理由认为其无效呢?如果协议标准定义里面没有这个答案,那么只可能在 云 LB自己的定义 / 配置里面找寻答案了。


    image.png

    问题处理:

    1. 临时修改了云 LB(HAProxy)的配置,把它的限制从 8KB 提升到 16KB,这个问题立刻被解决了。

    2. 作为长期方案,我们建议客户合理使用 Set-Cookie 头部,确保整体的 HTTP Response size 在一定的合理区间之内(8KB),避免无谓的系统开销和难以预料的问题的发生。


      image.png

    HTTP header过大,造成前端无法请求的问题,后来分析是迭代一个新功能,在http heder中插入一个较大的token导致。
    像一般的LB、waf,都有http header最大值限制,排错的时候都是一个点:

    1. 500 上游服务内部错误,如程序报错等;
    2. 503 上游服务资源不可用,有可能服务过载。

    HTTP 502/503/504 状态码的本质

    HTTP 5xx 系列状态码的语义的本质:跟 500 不同,502、503、504 都是 LB / 反向代理的后端的服务出了问题。基于这些理解,下一次你再遇到 5xx 的问题,相信就已经有比较充足的知识储备,能判断出是 Web 服务器本身有问题,还是反向代理 / LB 有问题了。

    参考

    为什么前端页面里多选一个城市就报错?
    https://time.geekbang.org/column/article/490397

    Hypertext Transfer Protocol -- HTTP/1.1
    https://datatracker.ietf.org/doc/html/rfc2616

    HTTP 教程
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP

    HTTP 响应代码
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status

    相关文章

      网友评论

        本文标题:【HTTP】http header 过大导致前端无法请求问题排查

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