前言
404 — 对于普通人来讲,它是“四百零四”,是一个用十进制表示的数字,但对于开发者,尤为是web相关的开发者来讲,它指相关资源没找到,表示了一种“不存在”的意思,若是我要隐含的表示个人某个东西不见了,我能够说“个人东西404了”(它的设计哲学中隐藏着加密学和压缩学)。在HTTP架构体系中,状态码是很重要的一环,它用各类协商好的数字字符来指代客户端和服务端在通讯时遇到的各类状况,在先后端分离的当前环境下,先后端处于分离状态,了解各状态码的指代含义对于加快开发进度和调试进度意义重大。html
各状态码解列
1、1xx:信息响应( Informational response)
简介:表示响应已被服务端接收、理解,但还需作进一步处理,该类型状态码每每是临时性的,由于立刻将会变为如下状态之一:成功(2xx)、重定向(3xx)、异常或错误(4xx或5xx)web
2、2XX:请求成功(Success)
简介:表示客户端发送的请求已成功被服务端接收、理解、接受后端
- 200 成功(ok):标准的HTTP请求响应成功状态码,get请求中,响应将包含与请求对应的实体,post请求中,响应将包含实体的描述或实体的操做结果。
- 202 已接受请求(Accepted):服务端接受了请求,但还没处理,最终可能会成功、或不会被执行或禁止执行
- 204 无内容(No Content):服务端成功处理了请求,但没返回任何内容
- 205 重置内容(Reset Content):服务端成功处理了请求,但没返回任何内容,区别于204的是:该响应要求客户端重置文档视图。
- 206 部份内容(Partial Content):服务端成功处理了请求的部份内容,该状态码通常用于HTTP下载工具的断点续传功能或多个下载的分段进行(如迅雷下载)
3、3XX:重定向(Redirection)
简介:表示客户端须要采起进一步的操做才能完成请求,该状态码经常使用于URL重定向,后续的请求地址在本次响应的Location域中指明缓存
- 301 永久移动(Moved Permanently):被请求资源已被永久的转移到新位置,而且未来对此资源的引用都应该使用它返回的URI之一,新的永久性URI将在Location域中返回。永远也别来烦我,去找张三吧。
- 302 临时移动(Found,原始短语为Moved Temporarily):因为移动式临时的,客户端之后仍是用原来的地址发送请求,新的临时URI将在Location域中返回
- 303 看其它(See Other):请求的地址已经被移动,请求的对应地址能够在另外一个URI上被找到
- 304 未修改(Not Modified):表示当前资源的版本在根据请求头的If-Modified-Since和If-None-Match参数判断缓存后,资源不曾被修改,这样客户端不须要从新传新资源,客户端仍然使用上次下载的资源复件。
4、4XX:客户端错误(Client errors),
简介:表示错误状况多是由客户端致使的,除非是一个HEAD请求,不然服务器应该把错误请求的详细解释实体抛出来阐述错误状况,这个错误信息应该告诉是临时的仍是永久情况,该状态码适用于任何请求方法。客户端应该尽量把错误实体展现给用户。服务器
- 400 错误请求(Bad Request):明显的客户端错误请求(如:语法缺陷,请求包过大、无效的请求消息片断、欺诈性请求路由)
- 401 未受权(Unauthorized):相似于403 Forbidden错误,但不一样的是该错误是指在特定的认证状况下,用户未能经过认证(如:登录认证)
- 403 已拒绝(Forbidden):该请求已被服务器验证为有效,可是服务器拒绝了它的操做,通常是由于用户没有取得对应资源的使用权。
- 404 未找到(Not Found)
- 405 方法不被容许(Method Not Allowed):该请求方法不支持对需请求资源的访问。如:明明是须要post方法的,你却给我传了个get方法
- 406 请求没法接受(Not Acceptable):请求资源的内容格式没法知足请求头中的要求,于是没法生成响应体,故没法接受,请求的格式由Content-type头重定义的媒体类型决定
- 408 请求超时(Request Timeout):客户端没有在服务器预备等待的时间内完成一个请求的发送,客户端能够随时再次提交这一请求而无需进行任何更改。
- 409 冲突(Confict):由于请求存在冲突没法处理,好比多人在线编辑工具出现的冲突
5、5XX:服务器错误(Server errors)
简介:表示服务端没法完成请求,该状态表示服务端在处理请求的过程当中发生了错误或异常架构
- 500 内部服务错误(Internal Server Error):通用错误消息,服务端遇到了一个不曾预料的状况(如:服务端可能没有使用try catch等错误处理机制来抓到并处理错误异常),没法给出更具体的错误消息来解释 —— 个人错,但我不知道我错哪了
- 501 请求没法实现(Not implemented):服务端不支持当前请求中所需的某个功能—— 臣妾作不到啊!
- 502 损坏的网关(Bad Gateway):做为网关或代理工做的服务端尝试执行请求时,从上游服务器接收到无效的响应。
- 503 服务不可用(Service Unavailable):因为临时的请求过载,致使服务端没法处理请求,该情况只是暂时的,而且会在一段时间后恢复,若是能预计延迟时间,那么响应中包含一个Retry-After头来标明延迟时间
附加知识点:
- Head方法:它与get方法几乎同样,但该方法只请求资源的头部信息(头部信息和get方法的头部信息同样),不会请求响应实体部分(即便包含了也会被忽略),由于head方法的该特性,咱们能够利用它测试、获取到对应资源的相关“摘要信息”,来决定采起的步骤,一个使用场景是在下载一个大文件时先获取其大小,再考虑是否下载它。—— 它是一个触手试探器,就像一个侦察兵同样
后记
就我我的的理解,对于大部分开发者来讲,了解经常使用的状态码,有一个状态码的框架图足以,若是发现了错误本身不清楚的上wiki或w3c找便可,不须要死记硬背,但它仍是很重要的,因此须要在平常开发中多多关注一些状态码指代的隐含意思,就像你不知道“2333”这个词语没法混二次元圈子同样,了解状态码也是一种混圈子的基础装逼属性。框架
参考