前端444状态码?这是什么?怎么没见过?

404 阅读2分钟

面试的时候被问到 444 状态码是什么了,很丢人,没回答出来,因为我没见过。回来就开始百度了,一查才知道,这个状态码不常见,至少不玩 nginx 的是不常见的,因此记录一下。

image.png

一、什么是状态码(Status Code)

总所周知,状态码是 HTTP 响应报文里用 3 位数字 告诉客户端「服务器处理结果」的字段。让浏览器/APP/前端代码 快速判断请求成功还是失败,并决定下一步动作(渲染、重试、弹错、跳转)。

二、前端常见状态码

类别范围英文中文含义
1xx100-199Informational继续等待
2xx200-299Success成功
3xx300-399Redirection重定向
4xx400-499Client Error客户端错误
5xx500-599Server Error服务器错误

三、什么是444状态码

字段内容
来源Nginx(官方模块 ngx_http_proxy_module
类型非 RFC非 IETF非 W3C
触发条件当 Nginx 主动关闭连接不想向客户端返回任何响应
浏览器看到的现象Network 面板标红,但 Response Headers 为空,大小 0 B
本质不是 HTTP 响应,而是 “连接被直接掐掉” 的占位符

所以本质上 444 是 Nginx 自己用的“内部暗号”,告诉管理员“我拒绝处理,但连 400 都懒得给”。 前端无法“捕获”444,只能把它视为 网络失败 的一种。你要想找到这个码,你就只能去翻nginx的日志,你才能看到。

什么时候会出现444状态码的情况

触发条件现场命令 / 配置片段结果
1. 非法 Host 头curl -H "Host: evil.com" http://your-ipNginx 日志出现 ... 444 0
2. 扫描器 UA 黑名单curl -A "sqlmap/1.0" http://your-ip同上
3. 缺失 User-Agentcurl -A "" http://your-ip同上
4. IP 黑名单deny 192.168.1.100;同 IP 访问即 444

即请求时判定你这个的请求不安全时。因此,在爬虫用户中可能会比较常见这个场景。