505 是什么
505 HTTP Version Not Supported 表示服务器不支持请求行里声明的 HTTP 版本(RFC 9110 §15.6.6)。它几乎不会由正常浏览器触发:多数情况是压测工具或老客户端使用 HTTP/0.9,或安全扫描器发送畸形版本号(例如 HTTP/9.9)。
基本信息
| 名称 | 505 HTTP Version Not Supported |
|---|---|
| 类别 | 5xx(服务器无法支持该协议版本) |
| 规范 | RFC 9110 §15.6.6 |
| 常见触发 | HTTP/0.9 请求、畸形版本号、代理协议不匹配 |
| 现状 | 罕见,多为异常实现或扫描流量 |
| 日志特征 | 来源集中、请求行异常 |
典型使用场景
- 安全扫描告警排查:日志里大量 505 通常是扫描器造成的噪音
- 老客户端兼容:确认是否在使用 HTTP/0.9 或自定义版本号
- 网关配置核查:确认对外宣告的协议版本与后端一致
- 自研服务器:请求行解析必须按规范校验版本
- 日志聚合:按来源统计 505 分布,快速区分扫描与真实故障
- 协议升级评估:确认是否仍有客户端使用被淘汰的版本
复现与统计
复现与统计
# 复现:发送一个不支持的版本号
printf 'GET / HTTP/9.9\r\nHost: example.com\r\n\r\n' | nc example.com 80
# → HTTP/1.1 505 HTTP Version Not Supported
# 统计访问日志里的 505 来源(Nginx 默认格式下状态码在第 9 列)
awk '$9==505 {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head请求行版本与结果
| 请求行 | 服务器反应 | 说明 |
|---|---|---|
| HTTP/1.1 | 正常处理 | 当前主流版本 |
| HTTP/1.0 | 正常处理,可能关闭连接 | 老客户端仍在用 |
| HTTP/2 | 不使用请求行 | 由二进制帧承载,明文 h2c 少见 |
| HTTP/9.9 等畸形值 | 返回 505 | 扫描或异常实现 |
服务器对不支持版本的正确反应是 505,但不少实现为了兼容会直接按 HTTP/1.1 处理,因此不报 505 并不代表协议校验严格。
若线上稳定出现 505 且来源集中,先按扫描流量处理并在 WAF 层拦截,再评估是否要调整日志告警阈值。
HTTP/0.9 请求没有请求头、只有一行 GET,遇到时应直接拒绝,不要尝试继续解析后续内容。
反向代理与后端协商协议版本失败时也可能留下类似记录,排查时先确认是哪一段链路报出的。
客户端库对不支持的版本应明确报错,而不是默默降级到 HTTP/1.0,否则会掩盖配置问题。