文章中英模式
布鲁斯前端面试题目 - 常见HTTP状态码
整理常见HTTP状态码的含义、使用场景与实例。掌握前端面试中经常被问到的HTTP状态码相关知识,提升API开发与错误处理能力。
文章中英模式
懒得看文章?那就来看视频吧
HTTP状态码概述
HTTP状态码是服务器对客户端HTTP请求的响应代码,用三位数字表示不同的响应结果。
- 1. 2xx - 成功: 请求已成功接收、理解和接受 (例如: 200 OK - 请求成功)
- 2. 3xx - 重定向: 需要进一步操作才能完成请求 (例如: 301 Moved Permanently - 网址永久转移)
- 3. 4xx - 客户端错误: 请求包含语法错误或无法完成 (例如: 401 Unauthorized - 未授权访问, 403 Forbidden - 禁止访问, 404 Not Found - 资源不存在)
- 4. 5xx - 服务器错误: 服务器在处理请求时发生错误 (例如: 500 Internal Server Error - 服务器内部错误)
2xx - 成功状态码
200 OK
请求成功。返回的信息取决于请求方法:
- 1. GET: 资源已获取并在响应中返回
- 2. POST: 资源创建成功,新资源在响应中返回
- 3. PUT/PATCH: 资源更新成功
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 42
{"message": "资源请求成功", "data": {...}}
201 Created
请求成功并创建了新资源。通常用于POST请求后。
HTTP/1.1 201 Created
Location: /api/resources/12345
Content-Type: application/json
Content-Length: 42
{"id": "12345", "name": "新资源", "created_at": "..."}
204 No Content
请求成功,但没有返回任何内容。常用于PUT, PATCH或DELETE操作。
HTTP/1.1 204 No Content
Date: Wed, 21 Oct 2023 13:45:26 GMT
3xx - 重定向状态码
301 Moved Permanently
请求的资源已永久移动到新位置。浏览器会自动跳转并缓存该重定向。
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/new-url
Content-Type: text/html
302 Found (临时重定向)
请求的资源临时位于不同的URL。不同于301,浏览器不应永久缓存此重定向。
HTTP/1.1 302 Found
Location: https://www.example.com/temporary-url
Content-Type: text/html
304 Not Modified
资源未修改,可使用缓存版本。通常是对包含If-Modified-Since或If-None-Match头的请求的响应。
HTTP/1.1 304 Not Modified
Date: Wed, 21 Oct 2023 07:28:00 GMT
ETag: "737060cd8c284d8af7ad3082f209582d"
Cache-Control: max-age=3600
4xx - 客户端错误状态码
400 Bad Request
服务器无法理解请求的格式,客户端应修改请求后再次发送。
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 35
{"error": "请求参数格式不正确"}
401 Unauthorized
没有进行身份验证或身份验证失败。响应必须包括WWW-Authenticate头以指示客户端如何认证。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Access to the staging site"
Content-Type: application/json
Content-Length: 27
{"error": "需要身份验证"}
403 Forbidden
服务器理解请求但拒绝执行,权限不足。不同于401,身份验证不会改变结果。
HTTP/1.1 403 Forbidden
Content-Type: application/json
Content-Length: 29
{"error": "没有访问权限"}
404 Not Found
请求的资源不存在。也可能表示不愿透露资源存在与否。
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 27
{"error": "资源不存在"}
405 Method Not Allowed
请求方法不支持。应返回Allow头,说明允许使用的方法。
HTTP/1.1 405 Method Not Allowed
Allow: GET, POST
Content-Type: application/json
Content-Length: 41
{"error": "不支持PUT方法于此资源"}
429 Too Many Requests
用户在给定时间内发送了太多请求(「限流」)。
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 3600
Content-Length: 41
{"error": "请求频率超限,请1小时后重试"}
5xx - 服务器错误状态码
500 Internal Server Error
服务器遇到了意料之外的情况,无法完成请求。
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 36
{"error": "服务器内部错误"}
502 Bad Gateway
作为网关或代理的服务器从上游服务器收到无效响应。
HTTP/1.1 502 Bad Gateway
Content-Type: application/json
Content-Length: 31
{"error": "上游服务器响应无效"}
503 Service Unavailable
服务器暂时过载或维护中。Retry-After头可指示客户端多久后重试。
HTTP/1.1 503 Service Unavailable
Retry-After: 120
Content-Type: application/json
Content-Length: 56
{"error": "服务暂时不可用,请2分钟后重试"}
504 Gateway Timeout
作为网关或代理的服务器在等待上游服务器响应时超时。
HTTP/1.1 504 Gateway Timeout
Content-Type: application/json
Content-Length: 31
{"error": "上游服务器响应超时"}
🔥 常见面试题目
(一) 401和403状态码有什么区别?
401 Unauthorized
'我不认识你,请先登录'
用户未提供身份验证或验证失败
403 Forbidden
'我认识你,但你没权限'
用户已认证,但权限不足
(二) 301和302重定向有什么不同?
301 永久重定向
网址永久搬家,以后都去新地址
浏览器会记住新地址
SEO:排名权重转移到新网址
使用场景:
- 1. 网站域名变更
- 2. 强制使用HTTPS
302 临时重定向
网址暂时换地方,下次还是来原地址
浏览器每次都会先访问原网址
SEO:排名保留在原网址
使用场景:
- 1. A/B测试
- 2. 维护期间临时页面
(三) 前端如何处理HTTP错误码?
设置全局错误处理器
针对不同错误码采取不同措施
显示用户友好的错误信息
记录错误并上报分析
// Axios全局错误处理简例
axios.interceptors.response.use(
response => response,
error => {
if (error.response) {
switch (error.response.status) {
case 401: // 未授权
router.push('/login');
break;
case 403: // 权限不足
showMessage('你没有权限执行此操作');
break;
case 404: // 资源不存在
showMessage('请求的资源不存在');
break;
case 500: // 服务器错误
showMessage('服务器出错,请稍后重试');
reportError(error);
break;
}
} else {
showMessage('网络连接失败');
}
return Promise.reject(error);
}
);
(四) 200 OK和204 No Content的区别?
200 OK
请求成功,这是你要的数据
适用场景:
- 1. GET请求获取资源
- 2. 需要返回数据的操作
204 No Content
请求成功,但没有数据返回
适用场景:
- 1. DELETE操作成功
- 2. 只需确认成功的操作
- 3. 节省流量的场景
(五) 500错误和504错误的区别?
500 Internal Server Error
服务器内部错误
👨💻 → 🖥️ ❌
服务器自身出错
排查方向:
- 1. 检查服务器错误日志
- 2. 检查应用程序代码
- 3. 检查数据库连接
504 Gateway Timeout
网关超时错误
👨💻 → 🔄 → 🖥️ ⏱️
代理等待上游服务器超时
排查方向:
- 1. 检查上游服务器状态
- 2. 检查代理超时设置
- 3. 检查网络连接