### HTTP状态码详解
HTTP状态码是Web服务器与客户端(如浏览器)通信的重要组成部分,用于指示请求的结果。根据HTTP协议规范,状态码分为五类,分别代表不同的含义和作用。
#### 1. 信息响应(1xx)
这类状态码表示临时响应,用于通知客户端其后续操作,但在HTTP/1.0中未定义任何1xx状态码,因此它们不作为对HTTP/1.0请求的合法响应。在HTTP/1.1中,此类状态码主要用于服务器推送信息,如`100 Continue`指示客户端继续发送请求或`101 Switching Protocols`表明服务器切换至请求者选择的协议,但这不在本文讨论范围内。
#### 2. 成功(2xx)
**200 OK**:这是最常见的响应状态码,意味着请求已被服务器成功处理。对于GET请求,响应体包含所请求的资源;对于HEAD请求,仅包含响应头;对于POST请求,实体通常描述或包含操作的结果。
**201 Created**:当客户端请求创建一个新的资源且服务器成功创建时,返回此状态码。新资源的URI可以在响应的实体中找到。若操作不能立即完成,服务器应告知何时资源可访问,否则应返回`202 Accepted`。
**202 Accepted**:服务器已接受请求,但处理未完成。这意味着请求可能不会最终完成,也无法在异步操作中重新发送状态码。此状态码允许服务器在不等待与用户代理的连接结束的情况下响应其他请求。
**204 No Content**:服务器成功处理了请求,但无响应内容。此状态码用于不希望客户端更新其文档视图的情况,但仍可能包括元信息供用户代理使用。
#### 3. 重定向(3xx)
**300 Multiple Choices**:此状态码在HTTP/1.0中很少使用,意味着被请求的资源有多个位置。实体主体应包含资源的列表和位置信息,供用户或用户代理选择最合适的资源。
**301 Moved Permanently**:请求的资源已永久移动到新的URL。客户端(如具备编辑链接功能的浏览器)应更新其记录的URL,并在将来使用新的URL来访问资源。响应的`Location`字段应包含新URL。如果是POST请求,且收到301响应,用户代理不应自动重定向,除非得到用户确认。
**302 Moved Temporarily**:与301类似,但资源的移动是暂时的。新的URL位于响应的`Location`字段中,但客户端应继续使用原来的请求URI进行后续请求。同样,对于POST请求,除非用户确认,否则不应自动重定向。
**304 Not Modified**:用于条件GET请求,即客户端提供了资源的最后修改时间,而服务器检查后发现资源未修改,于是返回此状态码。响应中仅包含一些辅助信息,如缓存控制、服务器时间等。客户端可以根据此响应避免下载重复数据。
#### 4. 客户端错误(4xx)
这一系列状态码表示客户端请求中存在错误或不符合服务器的要求。例如:
- **400 Bad Request**:请求语法错误,或请求无法被服务器理解。
- **401 Unauthorized**:请求未授权,通常需要身份验证。
- **403 Forbidden**:服务器理解请求,但拒绝执行。
- **404 Not Found**:请求的资源不存在。
- **405 Method Not Allowed**:请求方法不被允许。
每个状态码都有其特定的含义和应用场景,正确理解和使用HTTP状态码对于开发健壮的网络应用至关重要。