### HTTP状态码详解
HTTP(超文本传输协议)是用于从Web服务器传输超文本到本地浏览器的传送协议。HTTP状态码是由三位数字组成的响应状态代码,用来表示客户端和服务器之间请求与响应的状态。这些状态码可以分为五类:1xx(信息性状态码)、2xx(成功状态码)、3xx(重定向状态码)、4xx(客户端错误状态码)以及5xx(服务器错误状态码)。下面将详细介绍每一类状态码及其含义。
#### 1xx 信息性状态码
这类状态码表明请求已被接收,但还需要继续处理。它们通常出现在HTTP/1.1协议中的多步骤请求过程中。
- **100 Continue**:该状态码指示客户端应继续发送请求的剩余部分。
- **101 Switching Protocols**:该状态码表示服务器已切换到由客户端请求的协议。
- **102 Processing**:这是一个扩展的状态码,表示处理正在继续。
#### 2xx 成功状态码
这类状态码表示请求被成功处理。
- **200 OK**:请求成功,响应包含期望的信息。
- **201 Created**:请求成功并创建了新资源。
- **202 Accepted**:请求已经被接受,但尚未处理。
- **203 Non-Authoritative Information**:请求被成功处理,但返回的信息可能来自另一个源,如缓存。
- **204 No Content**:服务器已经成功处理了请求,但没有返回任何内容。
- **205 Reset Content**:告诉用户代理重置文档视图,例如清除表单输入或重新加载页面。
- **206 Partial Content**:服务器成功处理了请求的一部分,并提供了部分数据。
- **207 Multi-Status**:对于多状态操作的响应,这个状态码表示响应包含多个状态信息。
#### 3xx 重定向状态码
这类状态码表示需要客户端采取进一步的动作才能完成请求。
- **300 Multiple Choices**:针对一个请求,存在多个可用选项。
- **301 Moved Permanently**:请求的资源已被永久移动到新位置。
- **302 Move Temporarily**:此状态码现已更名为“307 Temporary Redirect”,表示请求的资源暂时位于不同的URI。
- **303 See Other**:告诉客户端使用GET方法获取资源的新位置。
- **304 Not Modified**:自从上次请求后,请求的资源未更改。
- **305 Use Proxy**:客户端应当通过代理访问请求的资源。
- **306 Switch Proxy**:此状态码已在HTTP/1.1中废弃。
- **307 Temporary Redirect**:请求的资源临时移动到新的URI。
#### 4xx 客户端错误状态码
这类状态码表示客户端发生错误,请求无法被服务器理解或处理。
- **400 Bad Request**:服务器无法理解请求。
- **401 Unauthorized**:请求未经授权。
- **402 Payment Required**:这个状态码保留未来使用,当前未被广泛采用。
- **403 Forbidden**:服务器理解请求,但是拒绝执行它。
- **404 Not Found**:请求的资源不存在。
- **405 Method Not Allowed**:请求的方法不被允许用于请求的资源。
- **406 Not Acceptable**:服务器无法根据客户端请求的内容特性生成响应。
- **407 Proxy Authentication Required**:客户端必须先进行代理验证才能继续。
- **408 Request Timeout**:等待请求时长超过了服务器愿意等待的时间。
- **409 Conflict**:请求无法完成因为与当前资源状态冲突。
- **410 Gone**:请求的资源不再可用且没有指定新的位置。
- **411 Length Required**:服务器拒绝在没有定义Content-Length头部的情况下接受请求。
- **412 Precondition Failed**:预条件失败。
- **413 Request Entity Too Large**:请求实体过大。
- **414 Request-URI Too Long**:请求的URI过长。
- **415 Unsupported Media Type**:请求的媒体类型不受服务器支持。
- **416 Requested Range Not Satisfiable**:请求范围不符合服务器的要求。
- **417 Expectation Failed**:预期失败。
- **421 There are too many connections from your internet address**:来自客户端地址的连接过多。
- **422 Unprocessable Entity**:请求格式正确但语义上有误。
- **423 Locked**:资源被锁定。
- **424 Failed Dependency**:由于前一个请求出错,导致当前请求不能被完成。
- **425 Unordered Collection**:此状态码表示资源不支持无序集合。
- **426 Upgrade Required**:客户端应该转换到不同的协议。
- **449 Retry With**:这个状态码用于指示客户端应当重复该请求。
#### 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**:服务器无法存储完成请求所需的资源。
- **509 Bandwidth Limit Exceeded**:服务器带宽限制已超出。
- **510 Not Extended**:需要客户端扩展其请求。
- **600 Unparseable Response Headers**:这个状态码不是标准HTTP状态码,通常出现在某些非标准实现中,表示服务器无法解析响应头。
以上就是HTTP状态码的详细解释,了解这些状态码对于开发者和运维人员来说至关重要,可以帮助他们快速定位问题所在,提高故障排查效率。