HTTP常用15个状态码及说明
状态码概念
为什么要有状态码这个概念呢?
状态码的职责就是客户端向服务器发起请求时,描述返回的请求的结果,借助状态码,用户可以知道服务器是正常处理了请求,还是出现了错误,如果出现了错误,也可以根据状态码分析具体是哪一端出现的错误
状态码的组成
状态码由一个三位数和原因短语组成
例如:200 OK ,200就是状态码,OK就是原因短语
状态码的类别
| 类别 | 原因短语 | |
|---|---|---|
| 1XX | Informational(信息性状态码) | 接受的请求正在处理 |
| 2XX | Success(成功状态码) | 请求正常处理完毕 |
| 3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
| 4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
| 5XX | Server Error(服务端错误状态码) | 服务器处理请求出错 |
状态码的数量?
仅记录在RFC2616上的HTTP状态码就有40种,若再加上WebDAV和附加HTTP状态码(RFC6585)等扩展,数量就有60多种,但是实际上常用的大概就15种常用的。
常用状态码
2XX 成功
-
200 OK
表示从客户端发来的请求在服务端被正常处理了
-
204 No Content
表示请求被服务器正常处理,但是返回的响应报文中没有实体部分,一般用在只需要客户端往服务器发消息,而客户端不需要新内容的时候使用
-
206 Partial Content
我只想要其中一部分
就是客户端进行了范围请求,而服务器成功执行了这次请求
场景:多线程下载一个文件,每个线程请求下载这个文件不同部分的内容
3XX 重定向
-
301 Moved Permanently
永久性重定向
-
302 Found
临时重定向
-
303 See Other
与302相同,但希望以GET的请求方式来请求新资源
注意:当返回301、302、303时,几乎所有浏览器都会把POST改成GET重新请求,虽然301和302标准时禁止的,但大家都会这么做
-
304 Not Modified
注意:这个和重定向没关系
这个是客户端发送附带条件(请求报文中加If-Match、If-Range)的请求时,服务端允许访问资源,但是不满足条件,会返回这个状态码
-
307 Temporary Redirect
临时重定向,和302一样,只不过大家会遵守307的标准,POST不会变GET请求
4XX 客户端错误
-
400 Bad Request
请求报文中存在语法错误
浏览器会向对待200一样对待400
-
401 Unauthorized
未授权,请求中没有认证信息
-
403 Forbidden
客户端请求的资源,是服务器禁止访问的资源,就会返回403
-
404 Not Found
客户端访问的资源在服务器上不存在
5XX 服务端错误
-
500 Internal Server Error
服务器出bug了
-
502 Bad Gateway
网关错误,服务器作为网关或代理,从上游服务器收到无效响应
-
503 Service Unavailable
表示服务器现在正超负载运行,或停机维护,暂时无法处理请求