【图解HTTP】(六)HTTP状态码有几种类别?各状态码的含义是什么?
一、HTTP状态码及其五种类别
当客户端向服务器发送请求时,客户端返回的状态码用于描述返回的请求结果。HTTP状态码由3位数字组成,第1位数字指定了响应类别,后2位数字无分类。响应类别有以下5种:
类别 | 原因短语 | |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求错误 |
只要遵守状态码类别的定义,即使改变RFC2616中定义的状态码,或服务器端自行创建状态码都没问题。
下面就介绍一下常用的14个状态码。
二、2XX成功
1、200 OK
表示从客户端发来的请求在服务器端被正常处理了。
在响应报文内,返回的内容会随着请求方法的不同而改变。如GET方法,对应请求资源的实体会作为响应返回;HEAD方法则只返回报文首部。如果对各种请求方法及其作用还比较模糊的话,可以看看我之前写的一篇文章【图解HTTP】(四)HTTP请求方法有哪些?各自的功能是什么?
2、204 No Content
该状态码代码服务器接收的请求已被正常处理,但是在返回的响应报文中不含任何资源实体的主体,也不允许返回任何实体主体。常见的一种场景是服务器端正常处理请求后不希望客户端页面发生任何改变或刷新,此时就返回204状态码。
204状态码一般在只需要从客户端发送信息到服务器,而对客户端不需要发送新信息内容的情况下使用。
3、206 Partial Content
206状态码表示客户端进行了范围请求,而服务器成功执行了该范围资源的GET请求。在响应报文中包含由Content-Range
指定范围的实体内容。
关于范围请求可以查看【图解HTTP】(五)多部分对象集合是什么?范围请求的功能?
三、3XX重定向
1、301 Moved Permanently
**永久性重定向。**该状态码表示请求的资源已被分配了新的URI,以后请求该资源都要使用新的URI。那么服务器端以什么方式告知客户端新的URI呢?答案是通过响应报文的Location
首部字段。
2、302 Found
临时性重定向。302状态码表示请求的资源已被分配了新的URI,希望客户端本次请求能使用新的URI访问该资源。
302状态码与301状态码非常相似,但302代表的资源不是被永久移动,只是临时性的移动。也就是说资源的URI在将来还可能变动。
3、303 See Other
303状态码表示由于请求的资源存在另外一个URI,应该使用GET方法定向获取请求的资源。303状态码和302很相似,都是希望客户端能够通过新的URI来访问资源,但是303与302的区别是303明确表示客户端应该使用GET方法请求该资源。
实际上,当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改为GET,并删除请求报文内的主体,之后请求会自动再次发送。
在标准中,301、302都是禁止将POST方法改为GET方法的,但实际使用时大家都会这么做。
4、304 Not Modified
该状态码表示客户端发送附带条件的请求时(比如带有与http缓存相关的首部字段iIf-Modified-Since
等),服务器端允许请求访问资源,但是因为请求不满足某些条件,直接返回304 Not Modified
,即服务器端的该资源未发生修改,客户端可直接使用未过期的缓存。
304状态码返回时,不包含任何响应的主体部分,它虽然被划分在3XX
类别里,但是和重定向没有关系。
5、307 Temporary Redirect
临时重定向。该状态码与302有着相同的含义。307会遵照浏览器标准,不会从POST变成GET,但处理响应的行为可能因浏览器不同而异。
四、4XX客户端错误
1、400 Bad Request
该状态码表示请求报文存在语法错误。当错误发生时,应当修改请求报文后再次发送请求。另外,浏览器会像对待200 Ok一样对待该状态码。
2、401 Unauthorized
该状态码表示发送的请求需要携带认证信息。当第一次发起请求时,如果未携带认证信息,则服务器返回401 Unauthorized
,并且浏览器接收到该响应后会弹出认证用的对话窗口。用户填写认证信息后再次发送请求,如果还是返回401 Unauthorized
则表示认证失败。
第一次请求未携带认证信息时,服务器返回的响应中必须包含一个WWW-Authenticate
首部字段用以质询用户信息。
3、404 Not Found
这个状态码大家应该再熟悉不过了,它表示服务器无法找到请求的资源。初次以外,也可以在服务器拒绝请求但不想说明理由时使用。
五、5XX服务器错误
1、500 Internal Server Error
表示服务器端在执行请求时发生了错误,也有可能是web应用存在的bug或临时故障。
2、503 Service Unavailable
该状态码表示服务器现在暂时处于超负载或在进行停机维护,无法处理请求。返回响应时,如果事先知道解除以上状况所需要的时间,最好通过Retry-After
首部字段来告知客户端。
更多文章查看专栏【图解HTTP】