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
表示服务器现在正超负载运行,或停机维护,暂时无法处理请求