什么原因导致 Apache 400?

什么原因导致 Apache 400?

有谁知道关于 apache 返回 400 状态代码的原因的任何官方或非官方文档吗?我知道这是由于错误的客户端请求造成的,但什么构成了错误的客户端请求?我知道请求大小过大和无效字符等因素可能会导致 400,但我希望得到某种明确的列表。

例如,o'reilly的“apache权威指南”没有提供这个细节。

谢谢!Damien

答案1

据我所知,几乎按照定义:不可能有一个明确的列表来列出导致400响应的原因,因为响应代码是针对抛给 Apache httpd 的任何东西,而这些东西都不能被解析为有效的请求。

这可能是“出现”看起来像一个有效的请求或者可能完全是废话。

响应400相当于WTF*#K

正如@NikitaKipriyanov 所评论的,apache(错误)日志通常记录哪条请求行触发了 400 响应。


历史上,HTTP 请求行以回车和换行因此,您的日志通常会显示 Apache 收到的第一个回车符和换行符之前抛出的任何内容。

在我的 Apache 日志中快速搜索 400 个响应,显示了许多或重复出现的“错误请求”类型:

  • 最常见的是:有效观察HTTP 1.1请求行,包括区分大小写的请求方法, A空间,请求的网址, 其他空间协议版本例如:
    "GET / HTTP/1.1"
    最有可能被拒绝,因为Host:标头未包含在请求中,并且该标头在 HTTP/1.1 中是强制性的

  • 很常见:二进制(握手)数据显示为转义的十六进制,例如

    • "\x16\x03\x01\x01\xfc\x01"在此示例中,这是由于尝试在普通 HTTP 端口 80(或任何其他端口,甚至 443,当未配置 TLS 时)上建立 TLS 1.2 连接而导致的
    • "\x16\x03\x01是类似 TLS 1 / 1.1 握手
    • \x16\x03"类似于 SSL3 握手
    • 在许多其他变化中
    • 或者甚至只是"\n"
  • 尝试连接完全不同的协议比 HTTP(S) 到 Web 服务器端口

    • "SSH-2.0-OpenSSH_7.4"探测 Web 服务器端口是否提供 SSH(系统管理员和用户经常使用的一种绕过公司防火墙的技巧)
    • "SSTP_DUPLEX_POST /sra_{BA195980-CD49-458b-9E23-C84EE0ADCD75}/ HTTP/1.1"探测支持SSTP 协议
    • 和别的。

相关内容