状态码的职责是当客户端向服务端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。
状态码类别
类别 | 原因短语 | |
1xx | Informational(信息性状态码) | 接收的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向) | 需要进行附加操作以完成请求 |
4xx | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5xx | Server Error(服务端错误状态码) | 服务器处理请求出错 |
HTTP状态码多达40多种,这里只说一下具有代表性的状态码。
分类 | 状态码 | 英文 | 描述 |
2XX | 200 | OK | 请求处理成功 |
204 | No Content | 请求处理成功,但没有资源可返回 | |
206 | Partial Content | 进行了范围请求,服务器返回了指定范围的内容 | |
3XX | 301 | Moved Permanently | 永久性重定向 |
302 | Found | 临时性重定向 | |
303 | See Other | 请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源 | |
304 | Not Modified | 服务器端资源未改变,可以直接使用客户端未过期的缓存 | |
4XX | 400 | Bad Request | 错误的请求 |
401 | Unauthorized | 需要HTTP认证 | |
403 | Forbidden | 请求被服务端拒绝了,比如请求无权限 | |
404 | Not Found | 服务器上没有请求的资源 | |
5XX | 500 | Internal Server Error | 服务端在执行请求时发生了错误,也有可能是Web应用存在的bug或某些临时的故障 |
503 | Service Unavaliable | 服务端暂时处于超负载货正在进行停机维修,暂时无法处理请求 |
301、302、303的异同
- 301:永久性重定向。请求的资源已被永久性分配了新的URI
- 302:临时性重定向。请求的资源已被临时性分配了新的URI
- 303:请求的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
303状态码和302状态码有着相同的功能,但是303状态码明确表示客户端应当采用GET方法获取资源。
举个🌰:
当使用POST方法访问CGI程序,其执行后的处理结果是希望客户端能以GET方法重定向到另一个URI上去时,返回303状态码。 虽然302 Found状态码也可以实现相同的功能,但这里使用303状态码是最理想的。
另外,当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送。
301、302标准是禁止将POST方法改变成GET方法的,但实际使用时大家都会这么做。