草庐IT

一次不规范HTTP请求引发的nginx响应400问题分析与解决

背景最近分析数据偶然发现nginxlog中有一批用户所有的HTTPPOSTlog上报请求均返回400,没有任何200成功记录,由于只占整体请求的不到0.5%,所以之前也一直没有触发监控报警,而且很奇怪的是只对于log上报的POST接口会存在这种特定用户全部400的情况,而对于其他接口无论POST还是GET均没有此类问题。进一步分析log发现其实对某些地区的用户请求,这个比例甚至超过了10%,于是花时间跟进了一下,最终发现源于部分机型客户端发出的HTTP请求格式不规范导致,这里记录一下分析过程、原因以及最终解决方案。问题分析常见nginx400原因搜寻网上资料,发现一般可能有以下几个原因会导致n

HTTP 400 错误

400是HTTP的状态码,主要有两种形式:1、badrequest意思是"错误的请求";2、invalidhostname意思是"不存在的域名"。400BadRequest是由于明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求。在ajax请求后台数据时比较常见。产生HTTP400错误的原因有:1、前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装;2、前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型;解决方案:1、对照字段名称,类型保证一致性2、使用stringify将前端传

HTTP 400 错误

400是HTTP的状态码,主要有两种形式:1、badrequest意思是"错误的请求";2、invalidhostname意思是"不存在的域名"。400BadRequest是由于明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求。在ajax请求后台数据时比较常见。产生HTTP400错误的原因有:1、前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装;2、前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型;解决方案:1、对照字段名称,类型保证一致性2、使用stringify将前端传