Web开发:什么是 HTTP 状态码?

一、什么是 HTTP 状态码?

HTTP 状态码是当客户端(如浏览器)向服务器发出请求时,服务器返回的一个三位数字代码。它代表了服务器对请求的处理结果,是客户端判断请求成功与否、以及下一步该如何操作的主要依据。

状态码的第一个数字定义了响应的类别,共有 5 类:

分类 描述 含义
1xx 信息性状态码 请求已被接收,继续处理。
2xx 成功状态码 请求已成功被服务器接收、理解并接受。
3xx 重定向状态码 需要客户端采取进一步的操作才能完成请求。
4xx 客户端错误状态码 请求含有语法错误或无法完成。
5xx 服务器端错误状态码 服务器在处理一个看似有效的请求时发生错误。

二、常见和重要的 HTTP 状态码详解

下面我们按类别列出一些最常见和最重要的状态码。

1xx - 信息性状态码

这类状态码比较少见,通常表示请求已被接受,需要继续处理。

  • 100 Continue:客户端应继续发送请求的剩余部分。常用于客户端发送较大数据(如文件上传)前,先询问服务器是否接受。
  • 101 Switching Protocols:客户端要求服务器切换协议,服务器已同意切换。例如,从 HTTP 切换到 WebSocket。
2xx - 成功状态码

表示请求已成功处理。

  • 200 OK最常见的成功状态码。表示请求成功,响应报文中包含了请求的资源(如 HTML 页面、图片等)。
  • 201 Created :请求成功,并且服务器创建了新的资源(通常在 POST 或 PUT 请求之后)。响应头 Location 字段通常会包含新资源的 URL。
  • 204 No Content:请求成功,但响应报文中没有实体主体(不返回任何内容)。常见于 DELETE 请求或只需成功执行但无需返回数据的 AJAX 请求。
3xx - 重定向状态码

表示浏览器需要执行额外的操作(通常是再次发送一个新请求)来完成最初的请求。

  • 301 Moved Permanently永久重定向 。请求的资源已被永久分配了新的 URI。今后任何对此资源的引用都应使用新的 URI。搜索引擎会将权重转移到新URL。
  • 302 Found临时重定向 。请求的资源临时从不同的 URI 响应请求。由于历史原因,它有时被不准确地解释为 "Moved Temporarily"。客户端应继续使用原始 URI 进行未来的请求。
  • 304 Not Modified资源未改变 。当客户端发送带条件的 GET 请求(例如 If-Modified-Since 头)时,如果资源自指定时间后未被修改,服务器会返回此状态码,告诉客户端直接使用本地缓存。这可以节省带宽和提高加载速度。
4xx - 客户端错误状态码

表示错误似乎是来自客户端的原因。

  • 400 Bad Request错误的请求。服务器无法理解请求的格式,通常是语法错误(如错误的请求结构、无效的请求消息帧)。
  • 401 Unauthorized未授权 。请求需要用户认证。通常伴随着 WWW-Authenticate 头,指示如何进行认证。注意,这个名字容易引起误解,它实际指的是"认证"(Authentication)失败,而非"授权"(Authorization)。
  • 403 Forbidden禁止访问。服务器理解请求,但拒绝执行。与 401 不同,服务器知道你的身份,但你的权限不足。例如,尝试访问没有权限的目录或文件。
  • 404 Not Found最著名的错误码。服务器找不到请求的资源。也可能是服务器不想告诉你为什么拒绝请求,或者没有其他响应可用。
5xx - 服务器端错误状态码

表示服务器在处理请求时发生了错误。

  • 500 Internal Server Error服务器内部错误。一个通用的错误消息,表示服务器遇到了一个未曾预料的状况,导致它无法完成对请求的处理。通常是服务器端应用程序(如 PHP, Java)代码出错。
  • 502 Bad Gateway错误的网关。服务器作为网关或代理,从上游服务器收到了无效的响应。常见于 Nginx 后面的 PHP-FPM 或后端应用服务器崩溃或没有响应。
  • 503 Service Unavailable服务不可用 。服务器当前无法处理请求(由于超载或系统停机维护)。通常,这是临时状态。响应中可能会包含 Retry-After 头,告诉客户端何时可以重试。
  • 504 Gateway Timeout网关超时。服务器作为网关或代理,未能及时从上游服务器收到响应。这通常意味着后端服务器在处理请求时花费了太长时间。

三、如何查看和使用状态码

  1. 开发者工具 :在浏览器中按 F12 打开开发者工具,进入 "Network"(网络) 标签页。刷新页面,你会看到所有网络请求,其中 "Status" 列就是 HTTP 状态码。

  2. 命令行工具 :使用 curl 命令时,可以添加 -I-i 选项来查看响应头和信息。

    bash 复制代码
    curl -I https://www.example.com
  3. 后端调试 :在后端代码中,你可以设置返回特定的状态码(例如,在 Node.js 中用 res.status(404).send(...),在 PHP 中用 http_response_code(404))。

四、总结与最佳实践

  • 对用户友好:对于 4xx 和 5xx 错误,最好配置一个自定义错误页面,而不是显示默认的浏览器错误页,以提供更好的用户体验。
  • 正确使用重定向:理解 301 和 302 的区别,对 SEO 和浏览器缓存行为有重要影响。
  • 善用缓存:正确使用 304 状态码可以极大提升网站性能,减少服务器负载。
  • 监控 5xx 错误:5xx 错误是服务器健康度的晴雨表,需要被持续监控和及时处理。

掌握 HTTP 状态码能帮助你快速定位和解决问题,是 Web 开发和运维的一项基础且重要的技能。

相关推荐
qq_427506086 分钟前
基于Vue 3和Element Plus利用h、render函数写一个简单的tooltip局部or全局指令
前端·javascript·vue.js
shcoc11 分钟前
备用 申请acme 申请ssl
网络·网络协议·ssl
泥菩萨^_^19 分钟前
【每天认识一个漏洞】React 和 Next.js RCE漏洞
前端·javascript·react.js
1024肥宅25 分钟前
JavaScript常用设计模式完整指南
前端·javascript·设计模式
董世昌4131 分钟前
js怎样控制浏览器前进、后退、页面跳转?
开发语言·前端·javascript
走,带你去玩32 分钟前
uniapp live-pusher + 腾讯云直播
前端·javascript·uni-app
徐同保36 分钟前
electron打包项目
前端·javascript·electron
Maybyy39 分钟前
如何在项目里面添加一个可以左右翻动并显示指定日期的日历
前端·vue.js
柯南二号44 分钟前
【大前端】【Android】用 Python 脚本模拟点击 Android APP —— 全面技术指南
android·前端·python
Arvin_Rong1 小时前
前端动态 API 生成与封装:前端 API 调用的一种思路
前端