当发送http请求时,我们可根据响应状态码来判定该次请求的成功与否,失败与否,若失败,失败的原因是什么!前提是,你造访的服务器要按道上的规矩办事,不会把响应状态码设置的乱七八遭的。下面列举了一些重要的http状态码,并列举了实际应用场景。其中红色部分,比较常见,需要着重记忆理解,能在实际开发中游刃有余。
总的来说,1xx is INFORMATIONAL
, 2xx is SUCCESS
, 3xx is REDIRECTION
, 4xx CLIENT_ERROR
, and 5xx is SERVER_ERROR
1xx
1xx开头的表示该请求已经被接受,但是还要继续处理。额。。。这个用的非常少,HTTP/1.0本来是没有1xx的定义,所以,为了不对客户端产生困扰,暂且封存这个状态码的使用吧。
状态码 | 状态信息 | 描述 | 举例 |
100 | Continue | 请求已接受,请继续发送请求 | 如果不继续请求,会返回request timeout(408)哦 |
101 | Switching Protocols | 服务器将转换另一种协议 | 比如客户端要求upgrade:Http/1.1,服务端会根据要求切换协议 |
2xx
2xx是成功系列,当你发现2开头,唔~~可以长舒一口气了。
状态码 | 状态信息 | 描述 | 举例 |
200 | ok | 一切正常,响应头和数据体都在改次响应中。 | 最常见 |
201 | created | 成功创建文档,文档的url见响应头Location中 | 与200的区别在于location |
202 | accepted | 已经接收请求,并正在处理。处理结果未知。 | 需要异步处理的情况 |
3xx
3xx代表一种重定向,当你发现3开头的时候,原先url标识的资源不存在了,需要转移到新的url进行请求。
状态码 | 状态信息 | 描述 | 举例 |
300 | multiple choice | 资源在别的地址,但是有多个url,location中有优先推荐地址。 | |
301 | moved permanently | 资源永久改变,location中有新的地址 | |
302 | moved temporarily | 资源临时改变,location中有新的地址 | |
304 | not modified | 客户端用本地缓存。识别缓存是否和服务端一致,请求头ETag,Cache-Control,If-Modified-Since,Expires等等。 | 客户端请求过该资源,且该资源未改变,直接使用本地缓存。 |
305 | use proxy | 资源在别的地址,地址未代理服务器,location指向的是代理服务器 |
4xx
4xx说明是客户端出了问题,在你请求的时候,要么url不对,要么方法不对,要么请求体参数不对,总之一句话,请求的人发生了问题。
状态码 | 状态信息 | 描述 | 举例 |
400 | bad request | 请求错误。 | 比如参数错误,服务器无法理解。 |
401 | unauthorized | 未经授权,服务器不给你提供服务。 | 没有权限验证信息/或者权限信息错误,服务器不想继续搭理你 |
403 | forbidden | 服务器找到资源了,但是拒绝处理。 | 有权限信息,但是分析发现你的权限不够处理该文件。(与401对比一下) |
404 | not found | 无法定位资源。 | 你这个url服务器找不到啊 |
405 | method not allowedd | 请求方法对资源不适用。 | 这个url要用post,你却用了get,服务器拒绝你。 |
406 | not acceptable | 资源与客户端的mime类型不兼容 | 客户端accept头显示能处理text/html,请求的资源却是audio/mp4,给你你也用不了,浪费网费,拒绝你 |
407 | proxy authentication require | 需要代理服务器授权 | 和401类似,但是要去大总管代理服务器处领个门卡 |
408 | request timeout | 服务器在等待你,客户端一直没发送请求。 | 这个我发现在1xx中讲过了 |
409 | conflict | 资源冲突。 | 比如现在资源版本号是5,你的put请求只允许修改版本号为2,冲突。 |
410 | gone | 资源永久不可用,且不能重定向。 | 404无法找到,但可能以后会有哦。410是网站管理员告诉你,别期待了,永久作废了。比如限时活动的页面。 |
413 | request entity too large | 顾名思义,请求体内容太大了 | 服务器不想处理1m以上的请求体,你发送一个1.1m的过来??拒绝你 |
414 | request-uri too long | uri太长 | 服务器不想接收100个字符以上的uri,你发送一个101字符的uri???拒绝你 |
415 | unsupported media type | 请求体格式,服务器不支持 | 服务器只看的懂片片,你发送一本日文话剧过来??拒绝你 |
416 | requested range not satisfiable | 服务器不能满足客户端的Range头要求 | 客户端要求range:123-432,服务器发现资源总共才23字节,你却要从123字节开始,这是漫天要价啊,拒绝你。 |
421 | there are too many connetions from your internet address | 同一个ip在该服务器建立的链接太多啦 | 最常见是一大批人通过同一个代理服务器访问目标服务器,服务器一看,嗯。。。?,这么猖狂,拒绝你。 |
5xx,6xx
5xx和6xx都是服务器错误,服务器说,这是我的锅。
状态码 | 状态信息 | 描述 | 举例 |
500 | internal server error | 服务器内部错误。 | 一般情况下是,开发人员代码抛异常了。最令人胆战心惊的数字。 |
501 | not implemented | 服务器无法识别的请求方法 | 服务器只支持get和head请求,但是你来了个post,服务器说:我能力不够。 |
502 | bad gateway | 网关返回的错误。无法在该网关下的上游服务器获取有效的应答 | 负载均衡下的服务器全挂了,网关服务器,嗯。。。? |
503 | service unavailable | 服务器负荷过重或者维护中,无法应答。 | 服务器正在接待100名顾客,当你去的时候,发现他所有接待线程占满了,并没有空搭理你。于是你就回来了。 |
504 | gateway timeout | 网关或代理,不能及时从上游服务器获得应答。 | 服务器接收了你的请求,但是处理这个请求要花费三天三夜,网关等不到答复,就回来告诉你,服务器没回答你。 |
505 | http version not supported | 服务器不支持请求中所指明的http版本 | |
600 | unparseable response headers | 原站没有返回响应头,只有响应体 |