HTTP状态码详解
HTTP状态码是由服务器返回给客户端的一组三位数字代码,用于指示请求的状态。这些状态码按照类别分为五类,分别代表不同类型的信息。了解HTTP状态码对于调试网络请求、排查问题和优化Web应用至关重要。
1xx:信息响应类
这类状态码表示接收的请求正在被处理,通常不会出现在直接的客户端-服务器通信中。
- 100 Continue:服务器已经收到请求头,客户端应当继续发送请求主体。
- 101 Switching Protocols:服务器将切换协议,如从HTTP切换到TLS/SSL或其他协议。
- 102 Processing(WebDAV):服务器接收到请求,正在进行处理。(此状态码主要用于WebDAV请求)
2xx:成功响应类
这类状态码表明请求已经被服务器成功接受、理解和处理。
- 200 OK:请求成功,一般用于GET和POST请求。
- 201 Created:请求被成功执行,资源已被创建,常用于POST请求后返回新资源的位置。
- 202 Accepted:服务器已经接受请求,但尚未处理完毕。
- 203 Non-Authoritative Information:请求成功,但是返回的信息可能来自另一来源,如缓存。
- 204 No Content:服务器成功处理请求,但没有返回任何内容。
- 205 Reset Content:告诉浏览器重置文档视图,如清空表单。
- 206 Partial Content:服务器成功返回了部分内容,常用于Range请求。
- 207 Multi-Status(WebDAV):对于批量请求中的每个子请求,返回一个状态码列表。
- 208 Already Reported(WebDAV):成员已在集合报告中列出过一次。
- 226 IM Used(HTTP Delta encoding):服务器已接受存储请求,但返回状态码226是为了告知客户端资源已被存储在代理服务器上。
3xx:重定向类
这类状态码意味着需要客户端采取进一步的动作才能完成请求。
- 300 Multiple Choices:被请求的资源有多个位置,服务器无法自动选择一个。
- 301 Moved Permanently:被请求的资源永久移动到了一个新的URL。
- 302 Found:被请求的资源临时移动到了另一个URL。
- 303 See Other:客户端应该采用GET方法获取资源,即使原请求使用的是POST方法。
- 304 Not Modified:自从上次请求后,资源未发生变化,因此返回304节省带宽。
- 305 Use Proxy:请求的资源只能从指定的代理服务器获取。
- 306 Unused:曾经在HTTP/1.1中保留,现已不再使用。
- 307 Temporary Redirect:类似于302,但明确指出客户端应当使用相同的请求方法重新发起请求。
- 308 Permanent Redirect:与301类似,但在语义上更明确指出了请求的持久改变,且可以携带原始请求方法和非idempotent请求体。
4xx:客户端错误类
这类状态码表示请求含有语法错误或者不能被服务器所理解。
- 400 Bad Request:服务器无法理解请求的格式。
- 401 Unauthorized:请求需要用户的身份验证。
- 403 Forbidden:服务器理解请求客户的身份,但是拒绝执行此请求。
- 404 Not Found:服务器找不到请求的网页。
- 405 Method Not Allowed:请求行中的指定方法不允许用于请求相应的资源。
- 406 Not Acceptable:请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
- 407 Proxy Authentication Required:和401类似,但由代理服务器要求身份验证。
- 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:服务器未能满足期望请求。
- 426 Upgrade Required:客户端应该切换到不同的协议。
- 428 Precondition Required:服务器要求请求有条件。
- 429 Too Many Requests:用户发出的请求太多太快。
- 431 Request Header Fields Too Large:请求头字段过大。
- 451 Unavailable For Legal Reasons:出于法律原因,请求被禁止。
5xx:服务器错误类
这类状态码表明服务器遇到错误,无法完成请求。
- 500 Internal Server Error:服务器遇到了意外情况,无法完成请求。
- 501 Not Implemented:服务器不支持请求的功能。
- 502 Bad Gateway:作为网关或代理工作的服务器收到了无效的响应。
- 503 Service Unavailable:服务器暂时过载或维护。
- 504 Gateway Timeout:作为网关或代理工作的服务器等待长时间后没有得到请求的响应。
- 505 HTTP Version Not Supported:服务器不支持请求中指定的HTTP协议版本。
- 506 Variant Also Negotiates(很少见)
- 507 Insufficient Storage(WebDAV)
- 508 Loop Detected(WebDAV)
- 510 Not Extended(扩展)
- 511 Network Authentication Required
理解HTTP状态码的意义
理解HTTP状态码不仅有助于开发者诊断Web应用的问题,还能让前端和后端开发者在设计RESTful API时做出更合理的响应。每种状态码都有其特定含义,通过正确设置和解读状态码,可以显著改善Web应用的可靠性和用户体验。例如,正确的使用3xx重定向可以让搜索引擎和用户在网站结构调整时仍能找到正确的路径,而恰当的4xx和5xx错误则能帮助快速定位问题所在,从而进行针对性修复。