告知从服务器返回的请求结果:状态码的职责所在是客户端向服务端发送请求时,描述返回的请求结果。
借助状态码,开发者可以知道服务端是否正常处理了请求,乃至根据返回的状态码帮助定位到错误原因。
状态码如200OK,以3位数字和原因短语组成
数字的第一位制定了响应类型,后两位五分类。响应类别有以下
| 类别 | 原因短语
----|-------------------------|---------------------- 1XX |Informational(信息性状态码)|接收的请求正在处理 2XX |Success(成功状态码)。 |请求正常处理完毕 3XX |Redirection(重定向状态码)|需要进行附加操作以完成请求 4XX |Client Error(客户端错误状态码)|服务器无法处理请求 5XX |Server Error(服务器错误状态码)|服务器处理请求出错
大部分返回的状态码服务器都可以根据类别先定义好第一位,后2位甚至可以约定好规则-自由发挥。
2XX的响应结果表明请求被正常处理了。
典型的200 ok
表示从客户端发来的请求在服务器被正常处理了。
204 Not Content
表示请求处理成功,但是没有资源返回。
3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理。
301 Moved Permanently
永久性重定向。该状态码表示请求的资源已经分配了新的URI(统一资源标识符),以后应该使用资源现在所指的URI。
302 Found
临时性重定向。它的性质和301
很相似,但是302
状态码代表的知识资源只是被临时性移动。
303 See Other
表示由请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。303
比302
多的就是指示了客户端改换用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。
4XX的响应结果表明客户端是发生错误的原因所在。
400 Bad Request
请求报文中存在语法错误。
401 Unauthorized
表示发送的请求需要有通过HTTP认真的认证信息。另外若之前已进行了一次请求,则表示用户认证失败😳。
403 Forbidden
该状态码表明对请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址试图访问)都可能导致发生403。
404 Not Found
服务器上没有请求的资源。除此之外,也可以用在服务端拒绝请求且不想说明原因时使用。
5XX的响应结果表明服务器本身发生错误
500 Internal Server Error
改状态码表明服务端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时性的故障。
503 Server Unavailable
改状态表示服务中超负载宕机了或者是服务器正在停机维护中。
状态码和状况的不一致
不少返回的状态码响应都是错误的。比如某些Web应用程序内部发生了错误,状态码依然返回200OK,这种情况也经常遇到。 😂