一、引言
HTTP 响应状态码是超文本传输协议(HTTP)中服务器对客户端(通常是 Web 浏览器)请求的响应指示。这些状态码是三位数字代码,用于告知客户端请求的结果,包括请求是否成功。响应被分为五个类别,每个类别中的状态码具有相似的含义。理解这些代码对于 Web 开发、故障排除和确保良好的用户体验至关重要。本报告旨在总结这些 HTTP 响应状态码,涵盖其类别、最常见的代码及其含义。
二、1xx 信息性状态码
1xx 系列的状态码表示服务器已接收到请求并正在继续处理。这些是临时响应,用于在服务器处理请求时提供连接状态的更新,而无需完成完整的请求 - 响应周期。这些代码通常不会直接显示给最终用户,而是用于服务器和客户端之间的内部通信。HTTP/1.0 不支持 1xx 响应,因此服务器不应向 HTTP/1.0 客户端发送此类响应。
(一)常见 1xx 状态码
100 Continue:此状态码表示服务器已接收到请求头,并且客户端可以继续发送请求主体。当客户端发送带有 “Expect: 100 - continue” 头的请求时,通常会使用此代码,以在发送可能很大或无法使用的请求主体之前验证服务器是否愿意接受该请求。
101 Switching Protocols:此代码表示服务器已接受客户端切换协议的请求。当客户端包含 “Upgrade” 头时,会发生这种情况,表明请求切换到不同的协议,通常用于实时双向通信,如 WebSocket。
102 Processing:此状态码表示服务器已接收到请求并且正在处理它,但最终响应尚未准备好。这适用于 HTTP/1.1 及更高版本,通常用于可能超过 20 秒的长时间运行的操作,例如复杂的数据库事务或大型文件处理。
103 Early Hints:此状态码主要与 Link 头一起使用,允许用户代理开始预加载必要的资源。它用于在服务器准备响应时允许用户代理预加载资源,从而提高页面加载性能。
(二)要求
服务器发送 1xx 信息性状态码的关键要求包括使用状态行后的第一个空行终止响应,并且不向 HTTP/1.0 客户端发送这些响应。
三、2xx 成功状态码
2xx 系列的状态码表示客户端的请求已成功被服务器接收、理解和接受。这些代码表明通信成功,Web 服务器可以处理从客户端浏览器收到的请求。
(一)常见 2xx 状态码
200 OK:这是标准成功的 HTTP 请求响应。它表示请求已成功,并且服务器已返回请求的数据。这通常用于 GET 请求以返回请求的资源(如网页、图像或 API 数据)以及相关的标头。它也用于 HEAD 请求以仅检索标头(元数据,如文件大小或上次修改日期)和用于 POST 请求以确认成功处理提交的数据,通常在响应主体中包含详细信息。
201 Created:此响应表示已成功创建一个或多个新资源。服务器通常在 Location 标头或请求 URI 中包含新创建资源的地址。常见的用例是在响应 POST 请求时创建新资源,例如创建新用户、文章或记录。
202 Accepted:此响应表示请求已被接受进行处理,但处理尚未完成。它用于另一个进程或服务器处理请求的情况,或用于批处理。
203 Non - Authoritative Information:此代码表示请求成功,但响应中的信息来自代理或中间服务器,而不是直接来自原始服务器。服务器可以使用此响应告知客户端资源已由代理服务器缓存。
204 No Content:此响应表示服务器已成功处理请求,但在响应主体中没有内容返回。这通常用于服务器指示文档编辑器对原始服务器的保存操作已成功完成。
205 Reset Content:此响应告知客户端在请求完成后返回其先前的状态。这可能发生在用户提交表单或其他数据后,服务器希望客户端刷新页面以进行新的提交。
206 Partial Content:此代码表示服务器已成功满足对资源的部分请求。这通常用于以较小的块服务大型文件以减少延迟,尤其是在流式传输视频或允许文件的渐进式加载时。
207 Multi - Status:此代码提供有关多个资源的信息和多个状态代码。它用于 WebDAV 等协议,在需要报告多个操作的状态时使用。
208 Already Reported:此代码在 < dav:propstat > 响应元素中使用,以避免重复枚举与同一集合的多个绑定内部成员。它通常与 WebDAV 中的多状态响应一起使用,以指示资源已在先前的响应中报告过。
226 IM Used:服务器已成功完成对特定资源的 GET 请求,并且响应是应用于当前实例的一个或多个实例操作结果的表示。这用于 HTTP Delta 编码。
四、3xx 重定向状态码
3xx 系列的状态码表示客户端需要采取进一步的操作才能完成请求。重定向的位置通常在响应的 Location 标头字段中指定,允许自动重定向。或者,重定向位置可以在响应的有效负载中提供,可能包括指向正确位置的超链接。这些代码对于应用程序分析很重要,因为它们指示来自服务器的重定向响应,这将导致应用程序的一些额外开销。
(一)常见 3xx 状态码
300 Multiple Choices:此代码表示请求的资源有多个可用选项,客户端可以选择一个。这通常在资源以不同格式(如视频格式)存在、提供具有各种扩展名或压缩类型的文件列表,或为具有多种含义的术语提供消除歧义的选项时使用。服务器可能包含指向首选选项的 Location 标头或包含指向可用选项链接的有效负载。
301 Moved Permanently:此状态表示请求的资源已永久移动到新的 URI。所有将来对此资源的请求都应使用提供的 URI 之一。这通常用于资源已永久重新定位时,指示搜索引擎更新其索引并提示用户更新书签。响应通常包含指定新 URI 的 Location 标头,从而实现自动重定向。
302 Found:也称为临时重定向,此状态表示请求的资源暂时位于不同的 URI。与 301 不同,这用于临时用途,客户端不应替换原始 URI。这通常用于维护期间的临时流量重定向、将用户导向备用资源而不更改保存的引用,或用于 A/B 测试。
303 See Other:此代码表示客户端应使用 GET 请求在不同的 URI 检索资源。重定向位置的资源不一定与最初请求的资源相同。这通常在 POST 或 DELETE 请求后使用,以表明服务器已处理数据并支持正确的缓存行为。
304 Not Modified:此状态表示请求的资源在客户端的缓存中可用且有效,并且自上次请求以来未被修改。客户端可以使用缓存的资源,而无需再次下载。当客户端发送条件 GET 或 HEAD 请求以验证缓存的资源时,会使用此代码。
305 Use Proxy:此代码指示必须通过 Location 标头中指定的代理路由请求。然而,由于安全问题,此状态代码现已弃用。
306 Switch Proxy:此代码指示后续请求应通过指定的代理发送。此状态代码也已弃用,不再使用。
307 Temporary Redirect:此状态表示请求的资源已暂时移动到 Location 标头中指定的不同 URI。重要的是,在自动跟随重定向时,必须保留原始请求方法(如 GET 或 POST)。
308 Permanent Redirect:此状态表示请求的资源已永久移动到 Location 标头中指定的新的 URI。与 307 类似,在跟随重定向时必须保持原始请求方法不变。
(二)重定向的重要性
正确配置重定向对于网站功能、搜索引擎可见性和用户体验至关重要。不正确的重定向或过多的重定向链会导致网站性能不佳和可用性问题。搜索引擎以不同的方式解释重定向,影响它们抓取和索引网页的方式。过多的重定向或重定向循环会混淆搜索引擎爬虫并导致索引问题,从而可能影响网站在搜索引擎结果页面(SERP)中的可见性。重定向会中断用户旅程,导致页面加载时间延迟并中断导航流程。网站所有者必须主动监控和管理 3xx 状态码。
五、4xx 客户端错误状态码
4xx 系列的状态码表示服务器无法完成请求,因为客户端存在错误。这些错误通常是由于客户端请求中的问题直接导致的,例如语法不正确、尝试未经授权的访问或缺少资源。4xx 代码可以用作对任何请求方法的响应。
(一)常见 4xx 状态码
400 Bad Request:此错误表示服务器由于请求本身的问题(例如语法错误或无效内容)而无法理解或处理客户端发送的请求。
401 Unauthorized:此错误表示请求未发送正确的身份验证凭据,服务器需要身份验证才能处理请求。
402 Payment Required:此状态码为将来使用而保留,尚未实现。
403 Forbidden:此状态码表示服务器理解客户端的请求,但由于没有足够的权限访问请求的资源而无法满足该请求。
404 Not Found:此状态码表示原始服务器无法找到请求的资源,通常意味着主机服务器找不到它。过多的 404 错误会降低用户体验。
405 Method Not Allowed:此状态码表示原始服务器识别请求的资源,但不支持请求中使用的 HTTP 方法。
406 Not Acceptable:此状态码表示请求的资源不以符合客户端指定的内容协商标头(例如,Accept - Charset 或 Accept - Language)的格式提供。
407 Proxy Authentication Required:此状态码表示客户端未提供通过代理服务器访问请求资源所需的身份验证凭据。
408 Request Timeout:此状态码表示原始服务器在合理的时间内未收到完整的请求,并且不希望继续等待连接。
409 Conflict:此状态码表示由于与目标资源的当前状态冲突而无法完成请求。
410 Gone:当资源被故意且永久删除时,使用此状态码通知客户端该资源不再可用。
411 Length Required:此状态码表示客户端未在标头中指定请求主体的 Content - Length,而获取资源需要此信息。
412 Precondition Failed:此状态码表示服务器拒绝该请求,因为该资源不满足客户端指定的条件。
413 Payload Too Large:此状态码表示服务器拒绝处理该请求,因为客户端发送的有效负载超出了服务器可接受的大小限制。
414 URI Too Long:此状态码表示服务器拒绝处理该请求,因为客户端提供的 URI 过长。
415 Unsupported Media Type:此状态码表示服务器拒绝处理该请求,因为有效负载的格式不受支持。
416 Range Not Satisfiable:此状态码表示服务器无法满足客户端请求的 Range 标头中指定的范围。
417 Expectation Failed:此状态码表示服务器无法满足客户端请求的 Expect 标头中指定的要求。
418 I'm a Teapot:服务器拒绝冲泡咖啡,因为它是一个茶壶。这是对超文本咖啡壶控制协议的幽默引用。
421 Misdirected Request:请求被定向到未配置为生成请求 URI 响应的服务器。
422 Unprocessable Entity:服务器理解请求实体,但由于语义错误而无法处理其中包含的指令。
423 Locked:正在访问的资源被锁定。
424 Failed Dependency:请求失败,因为它依赖于另一个失败的请求。
425 Too Early:服务器不愿意冒险处理可能被重放的请求。
426 Upgrade Required:服务器拒绝使用当前协议执行请求,但在升级到其他协议后可能愿意这样做。服务器在 426 响应中发送 Upgrade 标头以指示所需的协议。
428 Precondition Required:原始服务器要求请求是条件性的。
429 Too Many Requests:用户在给定的时间内发送了太多请求。这用于速率限制方案。
431 Request Header Fields Too Large:服务器不愿意处理该请求,因为单个标头字段或所有标头字段的总大小太大。
451 Unavailable For Legal Reasons:由于法律诉讼或限制,服务器无法提供请求的资源。
499 Client Closed Request:此 HTTP 499 错误通常发生在客户端在服务器能够响应之前终止连接时。
(二)4xx 状态码的影响及解决
解决 4xx 状态码对于增强用户体验和优化 SEO 至关重要。及时解决这些错误可以确保用户能够无缝访问所需的内容,从而提高整体用户满意度。正确处理和解决 4xx 错误对于防止对搜索引擎排名产生负面影响至关重要。
六、5xx 服务器错误状态码
5xx 系列的状态码表示服务器在尝试完成请求时遇到错误。这意味着问题是由服务器引起的。对于 5xx 代码,请求可以保持不变,当服务器修复后,您将获得请求的结果。这些错误通常需要服务器管理员的帮助才能调查。
(一)常见 5xx 状态码
500 Internal Server Error:这是一个通用的服务器错误响应,表示服务器遇到了意外情况,阻止其完成请求。
501 Not Implemented:此错误表示服务器不支持客户端发送的 HTTP 方法所需的功能。
502 Bad Gateway:此错误通常是由于代理服务器配置不当造成的。然而,当后端计算机之间的 IP 通信不良、客户端的服务器过载或防火墙功能不正常时,也可能出现此问题。
503 Service Unavailable:当服务器由于临时过载或服务器临时关闭进行维护而无法处理请求时,会发生此错误。
504 Gateway Timeout:当链中的某个服务器未及时收到来自链中更上游服务器的响应时,会发生此错误。
505 HTTP Version Not Supported:当服务器拒绝支持客户端计算机指定的 HTTP 协议时,会发生此错误。
506 Variant Also Negotiates:此错误表示服务器配置不正确。服务器在处理请求内容的协商部分时检测到循环引用。
507 Insufficient Storage:此错误表示服务器内存不足。
508 Loop Detected:当服务器尝试处理请求并发现无限循环时,会出现此错误。
509 Bandwidth Limit Exceeded:当达到系统管理员施加的带宽限制时,会发生此错误。
510 Not Extended:此错误表示 HTTP 请求中附加的扩展不受 Web 服务器支持。
511 Network Authentication Required:当客户端(浏览器)需要进行身份验证才能获得网络访问权限时,会出现此错误。
(二)5xx 状态码的影响及解决
5xx 状态码对 SEO 非常有害,因为它们直接影响用户体验,从而直接影响网站排名。常见的错误(如 500 和 503)会阻止搜索引擎抓取网站。修复 5xx 错误通常最具挑战性,因为它们通常需要开发人员或服务器管理员的参与。
类别 | 状态码 | 描述 |
---|---|---|
信息性 | 100 Continue | 请求的初始部分已收到,客户端应继续请求 |
信息性 | 101 Switching Protocols | 服务器正在按照客户端的请求更改协议 |
信息性 | 102 Processing | 服务器已接收到请求并且正在处理它,但最终响应尚未准备好 |
信息性 | 103 Early Hints | 主要与 Link 头一起使用,允许用户代理开始预加载必要的资源 |
成功 | 200 OK | 请求已成功,并且服务器已返回请求的数据 |
成功 | 201 Created | 请求已完成,并且已创建新资源 |
成功 | 202 Accepted | 请求已被接受进行处理,但处理尚未完成 |
成功 | 203 Non - Authoritative Information | 响应中的信息来自代理或中间服务器,而不是直接来自原始服务器 |
成功 | 204 No Content | 服务器已成功处理请求,但在响应主体中没有内容返回 |
成功 | 205 Reset Content | 告知客户端在请求完成后返回其先前的状态 |
成功 | 206 Partial Content | 服务器已成功满足对资源的部分请求 |
成功 | 207 Multi - Status | 提供有关多个资源的信息和多个状态代码 |
成功 | 208 Already Reported | 避免重复枚举与同一集合的多个绑定内部成员 |
成功 | 226 IM Used | 响应是应用于当前实例的一个或多个实例操作结果的表示 |
重定向 | 300 Multiple Choices | 请求的资源有多个可用选项,客户端可以选择一个 |
重定向 | 301 Moved Permanently | 请求的资源已永久移动到新的 URI |
重定向 | 302 Found | 请求的资源暂时位于不同的 URI |
重定向 | 303 See Other | 客户端应使用 GET 请求在不同的 URI 检索资源 |
重定向 | 304 Not Modified | 请求的资源在客户端的缓存中可用且有效 |
重定向 | 305 Use Proxy | 必须通过 Location 标头中指定的代理路由请求 |
重定向 | 306 Switch Proxy | 后续请求应通过指定的代理发送 |
重定向 | 307 Temporary Redirect | 请求的资源已暂时移动到 Location 标头中指定的不同 URI |
重定向 | 308 Permanent Redirect | 请求的资源已永久移动到 Location 标头中指定的新的 URI |
客户端错误 | 400 Bad Request | 请求本身的问题导致服务器无法理解或处理 |
客户端错误 | 401 Unauthorized | 请求未发送正确的身份验证凭据 |
客户端错误 | 402 Payment Required | 为将来使用而保留 |
客户端错误 | 403 Forbidden | 服务器理解请求,但没有足够的权限访问请求的资源 |
客户端错误 | 404 Not Found | 原始服务器无法找到请求的资源 |
客户端错误 | 405 Method Not Allowed | 原始服务器识别请求的资源,但不支持请求中使用的 HTTP 方法 |
客户端错误 | 406 Not Acceptable | 请求的资源不以符合客户端指定的内容协商标头的格式提供 |
客户端错误 | 407 Proxy Authentication Required | 客户端未提供通过代理服务器访问请求资源所需的身份验证凭据 |
客户端错误 | 408 Request Timeout | 原始服务器在合理的时间内未收到完整的请求 |
客户端错误 | 409 Conflict | 由于与目标资源的当前状态冲突而无法完成请求 |
客户端错误 | 410 Gone | 资源被故意且永久删除 |
客户端错误 | 411 Length Required | 客户端未在标头中指定请求主体的 Content - Length |
客户端错误 | 412 Precondition Failed | 服务器拒绝该请求,因为该资源不满足客户端指定的条件 |
客户端错误 | 413 Payload Too Large | 客户端发送的有效负载超出了服务器可接受的大小限制 |
客户端错误 | 414 URI Too Long | 客户端提供的 URI 过长 |
客户端错误 | 415 Unsupported Media Type | 有效负载的格式不受支持 |
客户端错误 | 416 Range Not Satisfiable | 服务器无法满足客户端请求的 Range 标头中指定的范围 |
客户端错误 | 417 Expectation Failed | 服务器无法满足客户端请求的 Expect 标头中指定的要求 |
客户端错误 | 418 I'm a Teapot | 服务器拒绝冲泡咖啡,因为它是一个茶壶 |
客户端错误 | 421 Misdirected Request | 请求被定向到未配置为生成请求 URI 响应的服务器 |
客户端错误 | 422 Unprocessable Entity | 服务器理解请求实体,但由于语义错误而无法处理其中包含的指令 |
客户端错误 | 423 Locked | 正在访问的资源被锁定 |
客户端错误 | 424 Failed Dependency | 请求失败,因为它依赖于另一个失败的请求 |
客户端错误 | 425 Too Early | 服务器不愿意冒险处理可能被重放的请求 |
客户端错误 | 426 Upgrade Required | 服务器拒绝使用当前协议执行请求 |
客户端错误 | 428 Precondition Required | 原始服务器要求请求是条件性的 |
客户端错误 | 429 Too Many Requests | 用户在给定的时间内发送了太多请求 |
客户端错误 | 431 Request Header Fields Too Large | 单个标头字段或所有标头字段的总大小太大 |
客户端错误 | 451 Unavailable For Legal Reasons | 由于法律诉讼或限制,服务器无法提供请求的资源 |
客户端错误 | 499 Client Closed Request | 客户端在服务器能够响应之前终止连接 |
服务器错误 | 500 Internal Server Error | 服务器遇到了意外情况,阻止其完成请求 |
服务器错误 | 501 Not Implemented | 服务器不支持客户端发送的 HTTP 方法所需的功能 |
服务器错误 | 502 Bad Gateway | 代理服务器配置不当或后端计算机之间的 IP 通信不良等 |
服务器错误 | 503 Service Unavailable | 服务器由于临时过载或服务器临时关闭进行维护而无法处理请求 |
服务器错误 | 504 Gateway Timeout | 链中的某个服务器未及时收到来自链中更上游服务器的响应 |
服务器错误 | 505 HTTP Version Not Supported | 服务器拒绝支持客户端计算机指定的 HTTP 协议 |
服务器错误 | 506 Variant Also Negotiates | 服务器配置不正确,处理请求内容的协商部分时检测到循环引用 |
服务器错误 | 507 Insufficient Storage | 服务器内存不足 |
服务器错误 | 508 Loop Detected | 服务器尝试处理请求并发现无限循环 |
服务器错误 | 509 Bandwidth Limit Exceeded | 达到系统管理员施加的带宽限制 |
服务器错误 | 510 Not Extended | HTTP 请求中附加的扩展不受 Web 服务器支持 |
服务器错误 | 511 Network Authentication Required | 客户端(浏览器)需要进行身份验证才能获得网络访问权限 |