前言
HTTP状态码是由服务器返回给客户端的三位数字代码,用于表示HTTP请求的处理状态。在平时的工作过程中我们经常会遇到它,并且在做项目请求后端时也需要去理解它,因此在面试过程中对于HTTP状态码及其含义也是常常会去作为考点的。下面本人将以目前所学知识加以讲解。
状态码分类
在HTTP协议中共有5种状态码,它们分别是:
- 1XX :信息状态码
- 2XX :成功状态码
- 3XX :重定向
- 4XX :客户端错误
- 5XX: 服务器错误
一、1XX :信息状态码
100 Continue: 表示客户端可以继续发送请求体。通常在发送 POST 请求时,客户端发送请求头后,如果服务端准备好接收请求体,会返回 100 Continue,此时客户端可以继续发送请求体。这个状态码在大数据上传场景中很有用,服务器可以在接收完头部后,允许或拒绝客户端继续发送请求体。
二、2XX :成功状态码
-
200 OK:
当我们发送一个GET请求到一个存在的资源时,此时查看服务器返回的状态码为
200 OK。 这个状态码表示请求已成功。对于GET请求,服务器将发送请求的资源作为响应返回。例如,在浏览器中输入网址,浏览器向服务器发送GET请求,如果网页存在,服务器将返回200 OK,浏览器将显示该网页。 -
201 Created:
当我们发送一个POST请求创建新的资源时,此时查看服务器返回的状态码为
201 Created。 这个状态码表示请求已成功,并且服务器创建了新的资源。例如,在创建新的用户账户时,服务器成功接收并保存了用户提供的信息,返回201 Created,表示用户账户已成功创建。 -
202 Accepted:
当我们发送一个异步的POST请求时,此时查看服务器返回的状态码为
202 Accepted。 这个状态码表示请求已被服务器接收,但尚未被处理。通常在异步处理场景中使用,服务器可能会在后台处理请求,而不会阻塞客户端的操作。例如,提交一个需要一段时间处理的任务。
三、3XX :重定向
-
301 Moved Permanently:
当发送一个GET请求到一个已经永久重定向的资源时,此时查看服务器返回的状态码为
301 Moved Permanently。 这个状态码表示请求的资源已永久移动到新的位置。例如,当网站的 URL 结构发生变化时,服务器可能返回301,通知客户端将请求重定向到新的URL。 -
302 Found:
当发送一个GET请求到一个临时重定向的资源时,此时查看服务器返回的状态码为
302 Found。 这个状态码表示请求的资源已经临时移动到新的位置。与301不同,302是临时性的重定向,客户端应该继续使用原始URL。例如,在网站维护期间,暂时将流量重定向到一个备用服务器。 -
303 See Other:
当发送一个POST请求到一个期望得到重定向的资源时,此时查看服务器返回的状态码为
303 See Other。 这个状态码表示服务器接收到POST请求后,建议客户端将请求重定向到另一个URL。通常在需要使用GET请求获取结果的情况下使用。 -
304 Not Modified:
当发送一个带有条件的GET请求,服务器返回此状态码表示请求的资源在上次请求之后没有发生修改,此时查看服务器返回的状态码为 304 Not Modified。
这个状态码通常与条件请求一起使用,例如客户端发送了一个带有 If-Modified-Since 或 If-None-Match 头部的GET请求,服务器会检查资源的修改时间或标识符,如果没有发生修改,就返回304状态码,告诉客户端可以使用缓存的版本。这有助于减少不必要的数据传输,提高性能。
四、4XX :客户端错误
-
400 Bad Request:
当发送一个包含错误参数的GET请求,此时查看服务器返回的状态码为
400 Bad Request。 这个状态码表示服务器无法理解客户端发送的请求。可能是因为请求的格式不正确,缺少必要的参数等。例如,客户端发送了无效的查询参数。 -
401 Unauthorized:
当发送一个需要授权的请求,但没有提供授权信息,此时查看服务器返回的状态码为
401 Unauthorized。 这个状态码表示客户端请求未被授权。通常,服务器将返回401状态码,要求客户端提供有效的身份验证信息,如用户名和密码。 -
403 Forbidden:
当发送一个被禁止访问的请求,此时查看服务器返回的状态码为
403 Forbidden。 这个状态码表示客户端没有访问请求资源的权限。服务器理解客户端的请求,但拒绝执行。可能是由于身份验证通过但权限不足,或者是服务器拒绝执行特定操作的请求。 -
404 Not Found:
当发送一个找不到资源的GET请求,此时查看服务器返回的状态码为 404 Not Found。
这个状态码表示服务器无法找到与请求的URI(通常是网页)相对应的资源。这可能是由于客户端请求了不存在的资源、拼写错误的URL等原因导致的,这个状态码在我们日常生活中也是较为常见的。例如,访问一个不存在的网页或请求一个不存在的API端点时,服务器通常返回404状态码。
五、5XX :服务器错误
-
500 Internal Server Error:
当发送一个导致服务器内部错误的请求,此时查看服务器返回的状态码为
500 Internal Server Error。 这个状态码表示服务器在处理请求时发生了意外的错误。可能是由于服务器上的代码错误、数据库故障等原因导致的。客户端通常无法解决这种问题,需要由服务器管理员进行修复。 -
503 Service Unavailable:
当发送一个导致服务器暂时不可用的请求,此时查看服务器返回的状态码为
503 Service Unavailable。 这个状态码表示服务器暂时无法处理请求,通常是由于服务器过载、维护或其他暂时性问题。客户端通常可以在稍后重试该请求。例如,当网站维护时,服务器可能返回503状态码。
结语
总的来说,HTTP状态码对程序员来说是非常重要的,它们提供了关于客户端请求和服务器响应之间交互状态的信息。程序员在开发和调试过程中经常需要理解和处理这些状态码,以确保应用程序的正常运行和用户体验。
- 1XX :信息状态码: 在特定场景下的信息性状态码,一般不直接影响程序员的业务逻辑实现,而是提供一些额外的信息,如100 Continue表示可以继续发送请求体。
- 2XX :成功状态码: 表示请求被成功接收、理解和处理。程序员常常关注200 OK,以及201 Created和202 Accepted等状态码,用于确认资源创建或异步请求的接受。
- 3XX :重定向: 提供了有关资源位置变更的信息。程序员需要考虑处理301和302的重定向,以及303的重定向到GET请求的情况。
- 4XX :客户端错误: 这是程序员可能最频繁遇到的状态码类别。常见的有404 Not Found,表示客户端请求的资源不存在,以及401 Unauthorized和403 Forbidden,需要处理用户身份验证和权限的问题。
- 5XX :服务器错误: 表示服务器在处理请求时发生了错误。程序员需要关注500 Internal Server Error,表示服务器内部错误,以及503 Service Unavailable,表示服务器暂时无法处理请求。
对程序员而言,深入理解这些状态码有助于:
- 调试和故障排除: 通过查看状态码,程序员可以快速定位请求或响应的问题,例如找不到资源、权限问题或服务器错误。
- 优化性能: 使用304 Not Modified状态码可以减少不必要的数据传输,提高应用性能。
- 用户体验: 处理重定向和错误状态码,确保用户获得友好的错误信息或被正确引导。
- 安全性: 对于401和403状态码,程序员需要确保身份验证和权限验证的正确实现,以维护系统的安全性。