对于400响应码,大家都不陌生,但是很多人在看见这个错误的时候,脱口而出的都是——"参数错误了!",实际上不是的,导致出现请求出现400响应码还有很多原因,比如:
1、使用NGINX 做反向代理服务器,那么在nginx里面有一个很多人陌生的指令设置,那就是
client_header_buffer_size (默认大小1K)与 large_client_header_buffers 默认值(4 8K)如果请求头大于设置的值,那么返回400错误码(图1、2)
2、请求中有非标准格式的请求头,比如标准的请求头都是使用中划线-,而有些开发可能不了解,自定义请求头时使用了下划线_,在有些代理服务中会拒绝这种下划线请求头,返回400错误,envoy代理中就有相关的设置headers_with_underscores_action:REJECT_REQUEST,同样,istio也是基于envoy的一款代理,它也具备同样的配置(图3、4)
3、请求头中同时带有Content-Length 与 Transfer-Encoding:chunked,对于envoy 这些代理是可以配置(allow_chunked_length:false)拒绝请求的,此时也会返回400错误(图5、6)