如果 HTTP 客户端发送一个 GET 请求,其主体会生成 400 Bad Request 响应,负载均衡器是否应该将该请求转发到后端或立即处理?不在负载均衡层处理它有什么好处吗?
最近,一个应用程序团队抱怨说,负载均衡器返回 400 Bad Request,而应用程序本身会返回 405 Method Not Allowed。看来负载均衡器是对的,应用程序团队误解了,但这让我想知道负载均衡器何时应该更宽容并将垃圾转发到后端。
答案1
为什么不两者兼而有之?一个 http 请求可能既格式错误,又可能在该上下文中不支持尝试的动词。使用解析器更容易检查 400,因此负载平衡器可以拒绝不兼容的标头,而无需知道请求的真正含义。
纵深防御适用。前端拒绝的恶意请求是后端永远无法看到的。可能阻止后端自身无法阻止的攻击。
例如,haproxy 认为他们的option accept-invalid-http-request
和option accept-invalid-http-response
应保持禁用状态。即符合标准。当然,由于 haproxy 是可配置的,因此可以将其设置为宽松模式以处理损坏的情况。