Skip to content

Latest commit

 

History

History

大话HTTP状态码

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

大话HTTP状态码

http


HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。接下来,我们一起来看看,状态码的工作机制。

1. 状态码的作用

告知从服务器返回的请求结果:状态码的职责所在是客户端向服务端发送请求时,描述返回的请求结果。

借助状态码,开发者可以知道服务端是否正常处理了请求,乃至根据返回的状态码帮助定位到错误原因。

图1:响应的状态码可描述请求的处理结果

状态码如200OK,以3位数字和原因短语组成

数字的第一位制定了响应类型,后两位五分类。响应类别有以下

| 类别           | 原因短语

----|-------------------------|---------------------- 1XX |Informational(信息性状态码)|接收的请求正在处理 2XX |Success(成功状态码)。 |请求正常处理完毕 3XX |Redirection(重定向状态码)|需要进行附加操作以完成请求 4XX |Client Error(客户端错误状态码)|服务器无法处理请求 5XX |Server Error(服务器错误状态码)|服务器处理请求出错

大部分返回的状态码服务器都可以根据类别先定义好第一位,后2位甚至可以约定好规则-自由发挥。

2. 2XX 成功

2XX的响应结果表明请求被正常处理了。

典型的200 ok表示从客户端发来的请求在服务器被正常处理了。

204 Not Content表示请求处理成功,但是没有资源返回。

3. 3XX 重定向

3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理。

301 Moved Permanently永久性重定向。该状态码表示请求的资源已经分配了新的URI(统一资源标识符),以后应该使用资源现在所指的URI。 302 Found临时性重定向。它的性质和301很相似,但是302状态码代表的知识资源只是被临时性移动。 303 See Other表示由请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。303302多的就是指示了客户端改换用GET方法去请求资源。

当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET(我就在这里遇到过坑,提交的post请求报文主体内的参数因为被改成get方法,丢失了请求报文的主体。),并删除请求报文内的主体,之后请求会自动再次发送。 301、302标准是禁止将POST方法变成GET方法的,但实际使用时浏览器厂商都会这么做。

304 Not Modified资源已找到,但未符合请求条件。304虽然被划分在3XX类别中,但是和重定向没有关系,它代表客户端发送附带请求报文首部条件的请求时,服务端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304(服务端资源未改变,可直接使用客户端未过期的缓存),返回时不包含任何响应的主体部分。

307 Temporary Redirect临时重定向。改状态码与302Found有着同样的含义,浏览器会遵照207标准,不会从POST变成GET。

4. 4XX 客户端错误

4XX的响应结果表明客户端是发生错误的原因所在。

400 Bad Request请求报文中存在语法错误。

401 Unauthorized表示发送的请求需要有通过HTTP认真的认证信息。另外若之前已进行了一次请求,则表示用户认证失败😳。

403 Forbidden该状态码表明对请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址试图访问)都可能导致发生403。

404 Not Found服务器上没有请求的资源。除此之外,也可以用在服务端拒绝请求且不想说明原因时使用。

5. 5XX 服务器错误

5XX的响应结果表明服务器本身发生错误

500 Internal Server Error改状态码表明服务端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时性的故障。

503 Server Unavailable改状态表示服务中超负载宕机了或者是服务器正在停机维护中。


状态码和状况的不一致

不少返回的状态码响应都是错误的。比如某些Web应用程序内部发生了错误,状态码依然返回200OK,这种情况也经常遇到。 😂