一、是什么
HTTP状态码(英语:HTTP Status Code),用以表示网页服务器超文本传输协议响应状态的3位数字代码
它由 RFC 2616规范定义的,并得到 RFC 2518
、RFC 2817
、RFC 2295
、RFC 2774
与 RFC 4918
等规范扩展
简单来讲,http
状态码的作用是服务器告诉客户端当前请求响应的状态,通过状态码就能判断和分析服务器的运行状态
二、分类
状态码第一位数字决定了不同的响应状态,有如下:
- 1 表示消息
- 2 表示成功
- 3 表示重定向
- 4 表示请求错误
- 5 表示服务器错误
1xx:消息
代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束
常见的有:
- 100 Continue(客户端继续发送请求,这是临时响应):这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应
- 101:服务器根据客户端的请求切换协议,主要用于websocket或http2升级
2xx:成功
代表请求已成功被服务器接收、理解、并接受
常见的有:
- 200 OK(成功):请求已成功,请求所希望的响应头或数据体将随此响应返回
- 201 Created(已创建):请求成功并且服务器创建了新的资源
- 202 Accepted(已创建):服务器已经接收请求,但尚未处理
- 203(非授权信息):服务器已成功处理请求,但返回的信息可能来自另一来源
- 204(无内容):服务器成功处理请求,但没有返回任何内容
- 205(重置内容):服务器成功处理请求,但没有返回任何内容
- 206(部分内容):服务器成功处理了部分请求
3xx:重定向
表示要完成请求,需要客户端采取进一步的操作才能完成请求。通常,这些状态代码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。
常见的有:
- 300 (多种选择):针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择
- 301 Moved Permanently(永久移动):请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置
- 302 Found(临时移动): 临时性重定向。服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
- 303 See Other(查看其他位置):临时性重定向,且总是使用 GET 请求新的 URI。请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码
- 304 Not Modified:自从上次请求后,请求的网页未修改过。
- 305 (使用代理): 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理
- 307 (临时重定向): 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
4xx:请求错误
代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。
常见的有:
- 400 Bad Request(错误请求): 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
- 401 Unauthorized(未授权): 请求未授权,要求身份验证。对于需要登录的网页,服务器可能返回此响应。
- 403 Forbidden(禁止): 服务器拒绝请求
- 404 Not Found(未找到): 找不到如何与 URI 相匹配的资源。
- 405(方法禁用): 禁用请求中指定的方法
- 406(不接受): 无法使用请求的内容特性响应请求的网页
- 407(需要代理授权): 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理
- 408(请求超时): 服务器等候请求时发生超时
- 413 Content Too Large: 文件太大
5xx:服务器错误
表示服务器无法完成明显有效的请求。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理 (5、6字头)。
常见的有:
- 500 Internal Server Error(服务器内部错误):服务器遇到错误,无法完成请求
- 501(尚未实施):服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码
- 502(错误网关): 服务器作为网关或代理,从上游服务器收到无效响应
- 503 Service Unavailable(服务不可用):服务器端暂时无法处理请求(由于超载或停机维护)
- 504(网关超时): 服务器作为网关或代理,但是没有及时从上游服务器收到请求
- 505(HTTP 版本不受支持): 服务器不支持请求中所用的 HTTP 协议版本
三、适用场景
下面给出一些状态码的适用场景:
- 100:客户端在发送POST数据给服务器前,征询服务器情况,看服务器是否处理POST的数据,如果不处理,客户端则不上传POST数据,如果处理,则POST上传数据。常用于POST大数据传输
- 206:一般用来做断点续传,或者是视频文件等大文件的加载
- 301:永久重定向会缓存。新域名替换旧域名,旧的域名不再使用时,用户访问旧域名时用301就重定向到新的域名
- 302:临时重定向不会缓存,常用 于未登陆的用户访问用户中心重定向到登录页面
- 304:协商缓存,告诉客户端有缓存,直接使用缓存中的数据,返回页面的只有头部信息,是没有内容部分
- 400:参数有误,请求无法被服务器识别
- ,403:服务器拒绝执行客户端的请求,告诉客户端禁止访问该站点或者资源,如在外网环境下,然后访问只有内网 IP 才能访问的时候则返回
- 404:服务器找不到资源时,或者服务器拒绝请求又不想说明理由时
- 503:服务器停机维护时,主动用503响应请求或 nginx 设置限速,超过限速,会返回503
- 504:网关超时
总结
- 1 xx:指示信息类,表示请求已接受,继续处理(临时响应)
- 2 xx:指示成功类,表示请求已成功接受
- 3 xx:指示重定向,表示要完成请求必须进行更进一步的操作
- 4 xx:指示客户端错误,请求有语法错误或请求无法实现
- 5 xx:指示服务器错误,服务器未能实现合法的请求