HTTP 状态码详解,从 200 到 503
每当你的浏览器向 Web 服务器请求某样东西,服务器在发回任何 HTML、图像或 JSON 之前,都会先以一个三位数字作答。那个数字就是 HTTP 状态码,是服务器用来简短表明发生了什么的方式:页面在这里、它搬走了、你不被允许进入,或者我们这边出了点问题。大多数时候你从不会见到这些代码,因为一切正常,页面就这么加载了。但一旦某个站点出岔子,状态码就是第一条值得读的线索。
这些数字并非随机。第一位数字把每一个响应归入五大家族之一,所以即便是一个不熟悉的代码,仅凭它的首位数字也大致告诉你出了什么差错。学会这五大家族,你就能一眼读懂几乎任何响应。

五大类别
1xx 信息性。服务器收到了你的请求,仍在处理它。这些在日常浏览中很少见,通常在浏览器和服务器之间被悄悄处理掉。100 Continue 是经典例子,它告诉客户端可以发送一个大请求体的其余部分了。
2xx 成功。请求成功了。200 OK 是你整天都想看到的那个,意味着资源被找到并正在返回的路上。201 Created 出现在你提交一个创建出新东西的表单或 API 调用之后,而 204 No Content 表示操作成功但没有内容可显示。
3xx 重定向。你请求的东西住在别处,浏览器通常会自动跟过去。重定向让旧链接保持有效,对搜索排名也至关重要。
4xx 客户端错误。请求里有什么东西在你这一端出了错:一个坏的 URL、缺少登录,或者一个不存在的资源。服务器是健康的;它只是无法接受你发送的内容。
5xx 服务器错误。你的请求没问题,但服务器在处理它时栽了跟头。这些指向站点的基础设施,而不是你。
人们真正会去查的具体代码
200 OK 是纯粹的成功。页面或数据按预期加载了。
301 Moved Permanently(永久移动)告诉浏览器和搜索引擎,一个页面有了新的永久居所。这是对 SEO 友好的重定向,因为它把排名信号从旧 URL 传递到新 URL。当你永久更改一个 URL 时使用它。
302 Found 是一个临时重定向。原始 URL 仍然是真正的那个,所以搜索引擎会继续索引它,而非目标地址。只有当移动确实是短暂的(比如把用户路由到一个季节性的落地页)时,才使用 302。
304 Not Modified(未修改)是快速浏览的无声英雄。它告诉浏览器,已经躺在缓存里的那份副本仍然是最新的,于是服务器跳过重新发送文件。更少的数据,更快的页面。
400 Bad Request(错误请求)意味着服务器甚至无法理解这个请求,常常是由于格式错误的语法或一个无效的参数。
401 Unauthorized(未授权)大致译为"我不知道你是谁,请先认证"。你缺少有效的凭证。
403 Forbidden(禁止)则不同:服务器知道你是谁,却仍然拒绝。你缺少权限,再登录一次也无济于事。
404 Not Found(未找到)是所有代码中最有名的。服务器是活着的,也回应了你,但那个地址上什么都没有。它通常源于一个打错的链接,或者一个被删除、被移动却没有设置重定向的页面。
429 Too Many Requests(请求过多)意味着你被限流了。你在太短的时间窗口里发送了太多请求,服务器在请你慢下来。各种 API 经常用到它。
500 Internal Server Error(内部服务器错误)是那个通用的"出了点问题"响应。服务器遇到了一个意外状况并放弃了,但它不会说是什么。去查服务器日志。
502 Bad Gateway(错误网关)出现在某个充当网关或代理的服务器,从它背后的上游服务器收到了一个无效回复时。常常是后端应用崩溃了或不可达的迹象。
503 Service Unavailable(服务不可用)意味着服务器暂时过载或停机维护。与 500 不同,它暗示麻烦是短期的,站点应该很快就会恢复。

状态码对 SEO 和调试意味着什么
对于搜索排名,301 和 302 之间的区分是最容易绊倒人的那个。永久移动应当始终用 301,好让新页面继承旧页面的权重;用错地方的 302 会让搜索引擎继续索引原始 URL,并把你的信号一分为二。与此同时,大量的 404 浪费抓取预算并让访客沮丧,所以与其放任坏链接腐烂,不如去重定向或修复它们。
对于调试,家族告诉你该往哪里看。4xx 指向请求,所以检查 URL、头部和凭证。5xx 指向服务器,所以检查应用日志、上游服务,以及是否刚有一次部署出了岔子。一波 502 和 503 往往意味着某个后端宕机或过载,而非代码 bug。你可以用我们的开发者工具查看一个站点确切返回的状态,而当一个 5xx 看起来更像连通性问题、而非应用故障时,一次快速的 DNS 查询能确认域名是否仍然解析到正确的地址。
常见问题
404 错误对我的网站有害吗?
少量 404 是正常且无害的。当热门页面返回 404,或者损坏的内部链接堆积起来、浪费抓取预算并让访客沮丧时,问题才开始。请重定向已移动的页面并修复坏链接。
301 和 302 重定向有什么区别?
301 是永久的,会把排名信号传给新 URL,所以当一个页面永久移动时用它。302 是临时的,会保持原始 URL 被索引,所以只在短暂的移动时使用它。
401 和 403 有什么区别?
401 意味着你尚未认证,所以登录可能解决它。403 意味着服务器认得你,却仍然拒绝访问,因为你缺少权限,所以再登录一次也帮不上忙。
500 错误是什么意思,我该如何修复?
500 Internal Server Error 意味着服务器在处理你的请求时遇到了一个意外故障。这条消息故意写得很笼统,所以修复通常从阅读服务器日志、找出真正原因开始。
我为什么收到 429 状态码?
429 Too Many Requests 意味着你因发送请求过快而被限流。慢下来,尊重服务器返回的任何 Retry-After 头,并在脚本和 API 客户端中加入退避(backoff)。
503 Service Unavailable 是什么意思?
503 意味着服务器暂时无法处理请求,通常是由于过载或计划内维护。它标志着一个短期问题,所以站点应该很快会自行恢复。
