定位node服务返回400的问题

598 阅读2分钟

定位node服务返回400的问题

背景

我们内部的监控报警(针对node SSR服务的),有一个400的错误出现了很多次。需要解决

首先定位问题

400的定义

告诉客户端它发送了一条异常请求。400页面是当用户在打开网页时,返回给用户界面带有400提示符的页面。其含义是你访问的页面域名不存在或者请求错误

主要分为两种。

  1. 语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
  2. 请求参数有误。

400的主要有两种形式:

  1. bad request意思是“错误的请求";
  2. invalid hostname意思是"不存在的域名”。

(例如,格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求)服务器不能或不会处理该请求

找可能点

排查过请求URL没问题后,怀疑是 请求本身的大小 错误,有些请求的cookie很大,可能超长了

还有个背景是我们的用户的cookie 没法轻易减小。所以我们的解决办法是只能修改我们node服务的配置

解决办法

调大请求头的大小:

  1. 如果是node起的服务 (注意放的位置)
  • node --max-http-header-size=16384 index.js
  1. 如果是pm2起的服务
  • pm2 start index.js --node-args="--max-http-header-size=16384"

ps: 16384 是 16kb

结果

设置后通过看监控,400的错误几乎没有了 ✅

另外

这个值也不能设置太大,并发量大的话容易造成OOM(内存溢出)


码字不易,点赞鼓励!