程序员必备的 HTTP 状态码全景指南:从 301 到 429,那些网页中的常见“数字密码”
我们在日常浏览网页或开发前后端接口时,经常会看到各种各样的三位数字。它们就像是服务器和浏览器之间的“黑话”,准确地传达着当前请求的成败、去向以及背后的原因。
如果你经常被 301 和 308 搞混,或者分不清 401 和 403 的区别,这篇文章将带你一次性彻底理清这些网页中常见的数字。
一、 重定向家族:301 - 308(网页去哪了?)
HTTP 的 3xx 状态码用于重定向,告诉客户端:你请求的资源不在老地方了,请去新地方找它。
为了彻底搞懂它们,我们要看两个核心维度:
- 这是永久搬家还是临时搬家?
- 重定向后,能不能改变请求方法(比如把 POST 变成 GET)?
1. 301 Moved Permanently(永久重定向 - 传统版)
- 含义:网页永久搬家了。
- 特点:搜索引擎会把旧网址的 SEO 权重全部转移给新网址。
- 历史包袱:规范规定不应该改变请求方法,但现实中绝大多数浏览器在收到 301 时,会把 POST 强行改成 GET。
2. 302 Found(临时重定向 - 传统版)
- 含义:网页暂时搬家了,以后还得回老地方。
- 特点:不传递 SEO 权重。和 301 类似,它在处理 POST 请求时也会被各大浏览器擅自改成 GET。
3. 303 See Other(临时重定向 - 强制转 GET)
- 含义:去看看别的页面吧,用 GET 方法去获取。
- 场景:专门为了解决 302 在 POST 之后的行为不确定而诞生。常用于表单提交成功后,重定向到一个“成功提示页”,强制变成 GET 防止重复提交。
4. 307 Temporary Redirect(临时重定向 - 现代严格版)
- 含义:暂时搬家,但绝对不准改变请求方法。
- 特点:如果客户端发的是 POST,重定向到新地址时依然必须是 POST,且请求体(Body)完整保留。
5. 308 Permanent Redirect(永久重定向 - 现代严格版)
- 含义:永久搬家,且绝对不准改变请求方法。
- 特点:它是 301 的现代严谨版。既有 301 的“永久转移 SEO 权重”特性,又有 307 的“严禁改变请求方法”特性。
💡 开发小建议:
- 普通网址换域名、做永久跳转:用经典的 301(兼容性最好)。
- 涉及复杂 API、需要严格保持 POST 请求体不丢失的永久跳转:用 308。
- 临时跳转且不在乎方法变成 GET:用 302 或 303。
二、 客户端错误家族:400 - 429(“你”的请求出错了)
当看到 4xx 开头的数字时,通常意味着客户端(浏览器或你的代码)发出的请求有问题。服务器表示:“臣妾做不到啊!”
我们可以把它们按“错在哪个环节”分类:
1. 权限与认证类(401, 403)
- 401 Unauthorized(未认证):你没有登录,或者身份凭证(Token/密码)已经过期无效。(注:虽然叫 Unauthorized,但实际意思是 Unauthenticated)。
- 403 Forbidden(无权限):服务器知道你是谁(或者不需要知道),但明确拒绝让你访问。比如普通用户强行请求管理员后台。
2. 资源消失类(404, 410)
- 404 Not Found(未找到资源):网址拼写错了,或者网页被删了。
- 410 Gone(永久消失):比 404 更绝情。它明确告诉搜索引擎:“这个资源曾经在这,但现在永久删除了,永远不会回来。”搜索引擎看到 410 后会立刻从索引中拔除它。
3. 请求限制与冲突类(400, 405, 409, 429)
- 400 Bad Request(请求错误):参数传错了,或者 JSON 格式不合法,服务器看不懂。
- 405 Method Not Allowed(方法不允许):接口明明存在,但你用错了 HTTP 方法(比如给一个只支持 POST 的接口发了 GET)。
- 409 Conflict(冲突):请求与当前状态冲突。比如你在注册一个已经被别人注册过的用户名。
- 429 Too Many Requests(请求过多/限流):你手速太快或爬虫频率太高,触发了服务器的限流保护。通常响应头会带上 Retry-After 告诉你歇一会儿再来。
4. 数据格式与大小类(406, 413, 415)
- 406 Not Acceptable:服务器无法满足你要求的返回格式(比如你要 XML,但人家只有 JSON)。
- 413 Payload Too Large:请求体(如上传的大文件、高清图)超出了服务器允许的最大上限。
- 415 Unsupported Media Type:你发送的数据格式(Content-Type)不被服务器支持。
三、 总结:开发中最常遇到的“黄金组合”
如果你觉得数字太多记不住,在实际开发和排查中,只要能秒懂下面这几个高频“数字密码”,就能解决 90% 的日常问题:
- 🔄 301:网站永久搬家,老站变新站。
- ❌ 400:前端传给后端的参数或格式错了。
- 🔑 401:没登录,赶紧去登录。
- 🛡️ 403:登录了,但没权限看。
- 🔍 404:网址写错或页面找不到了。
- 🚦 429:请求太频繁,触发限流了。
掌握了这些 HTTP 状态码的底层逻辑,下次在控制台(F12)或日志里看到它们时,你就能一眼看出问题所在了!
评论
发表评论