HTTP状态码

157 阅读3分钟

状态码的职责是当客户端向服务端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。

状态码类别

类别原因短语
1xxInformational(信息性状态码)接收的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务端错误状态码)服务器处理请求出错

HTTP状态码多达40多种,这里只说一下具有代表性的状态码。

分类状态码英文描述
2XX200OK请求处理成功
204No Content请求处理成功,但没有资源可返回
206Partial Content进行了范围请求,服务器返回了指定范围的内容
3XX301Moved Permanently永久性重定向
302Found临时性重定向
303See Other请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源
304Not Modified服务器端资源未改变,可以直接使用客户端未过期的缓存
4XX400Bad Request错误的请求
401Unauthorized需要HTTP认证
403Forbidden请求被服务端拒绝了,比如请求无权限
404Not Found服务器上没有请求的资源
5XX500Internal Server Error服务端在执行请求时发生了错误,也有可能是Web应用存在的bug或某些临时的故障
503Service 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方法的,但实际使用时大家都会这么做。