有谁知道关于 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 协议- 和别的。