内容简介:标题皮了一下,但是内容应该算是比较用心的,不是直接抄了一下官方文档和一堆抽象的术语,尽量配合实例解释的通俗一些。状态码(Status Code)和原因短语(Reason Phrase)用于简单描述形如
标题皮了一下,但是内容应该算是比较用心的,不是直接抄了一下官方文档和一堆抽象的术语,尽量配合实例解释的通俗一些。
基本介绍
状态码(Status Code)和原因短语(Reason Phrase)用于简单描述 请求的结果 。常见的比如 200 OK,表示请求成功;404 not Found表示请求的资源未找到。原因短语是对状态码的解释说明。
形如 200
这样的状态码,这里的 3位数字
中第1位数字, 通常
表示响应的类别( 会有特例
),完整分类参见在 http1.1-RFC6
,大致可以分成以下几类。
状态码 | 含义 |
---|---|
1xx | 请求正被处理 |
2xx | 请求成功处理 |
3xx | 请求需要附加操作,常见的例子如重定向 |
4xx | 客户端出错导致请求无法被处理 |
5xx | 服务端处理出错 |
(4,5常被用在排查bug时前后端互相甩锅-_-!)下面详细介绍常用的状态码和原因短语
分类
2xx
200 OK
表示请求被正常处理,这个比较常见。、
204 NO Content
表示请求成功,但是响应的报文中不含实体主体。通常用于只需要客户端向服务端发送信息,而不需要接受新信息的情况使用
(这么官方且抽象的描述显然不是我的风格),举例:
现在很常见的一种请求类型 option
,是用来做正式请求的预请求,这个请求通常 只需要确认后续的请求能不能通过,因此只需要一个结果,而不需要返回其他任何内容
,因此这类请求通常会返回204。
相信大家小时候都经常考试,其他状态码如果比喻为填空题
--客户端提问(发请求),服务端返回详细内容(答案)。
那么204可以理解为判断题
--客户端提问(发请求),服务端返回对或者错(答案)
206 Partial Content
根据字面意思可以知道,这个表示返回了部分的实体。
http的请求头中,有一个叫做 Range
,用来做范围请求,例如:
Range:byte=5001-10000 //表示请求资源的5001-10000字节的部分
这种情况下,如果服务器接受范围请求并且成功处理,就会返回 206
,并且在响应的头部返回
Content-Range:bytes 5001-10000/10000` //整个资源有10000字节,本次返回的范围为 5001-10000字节
3xx
301 Moved Permanently
字面意思:资源被永久重定向了。这种情况下响应的头部字段 Location
中一般还会返回一个地址,例如:
客户端发起一个请求,要访问a站点,此时收到的响应如下:
301 Moved Permanently ... Location:`b.com` ... //上述内容表示:亲,您请求的资源已经永久转移啦,这边建议您去新的地址b.com访问呢,以后也请直接访问这个地址哦
302 Found
字面意思:资源 临时 重定向了。这个情况和上面的唯一区别就在于一个是临时,一个是永久:还是上面的例子:
302 Found ... Location:`b.com` ... //上述内容表示:亲,您请求的资源本次被转移啦,当时后面还有可能再次转移,mm这边也不确定怕,所以这边建议您本次去新的地址b.com访问,以后的话还是先访问原来地址哦,有任何变化mm依然会热心为你解答
303 See Other
这个和302很像,但是有个细微区别是,除了会提示客户端去请求 Location
,还会顺便要求要使用 Get
方法去请求。 在这补充一下一个历史背景
请求返回301 302 303 时,几乎所有浏览器都会把原先的POST请求改为GET请求。虽然FRC1945和RFC2068规范中有规定:不允许客户端在重定向时修改方法。
简单的说,实际的浏览器在处理301和302时,默认就会把原先的POST请求改为GET请求,所以实际上使用303的意义单纯只是让语义化更清晰点。(303表示服务器明确告诉客户端,你要使用GET方法访问location,如果是302,就是之告诉客户端要访问location,但是客户端自己也会转用GET方法访问)
304 Not Modified
字面意思是:资源未改变,可直接使用缓存。
这种响应一般是 GET
请求中带有 附加条件
,例如请求头中含有 if-Match,if-Modified-Since
等( if-Match
表示带有特殊标记的资源, if-Modified-Since
表示指定时间后未变更的资源,因为本文着重讲解状态码,所以不引入太多http头部的相关内容,这里是为了简单解释下 附加条件请求
的含义)。
这种情况下,服务端不会返回响应主体,含义就是:”从你上次访问以来这个资源都没变过哟,直接使用你本地的缓存就行啦“。
304就是3xx里面的一个特例,因为它不算是一个重定向。(一般我们认为重定向要给出一个新的地址让客户端去访问,304如果一定要解释为重定向,只能解释为让客户端转去访问缓存-_-)
307 Temporary Redirect
这个重定向是为了解决前面刚刚介绍的一个历史背景问题: 302
时浏览器默认会转用 GET
方法去请求 Location
,而如果是 307
, 含义就是严格限制不允许从 POST
转为 GET
,这个目前我在实际工作中很少遇到。
4xx
4xx表示一般是客户端发生了错误。(这位前端同学,乖乖接了这个bug吧!)
400 Bad Request
(这个状态码相信大家一定很不陌生,特别是入门的新同学~)400的含义简单粗暴:“对不起,你的请求中有语法错误”,那具体是什么语法错误呢? 答案是-- 不一定,一般来说响应报文里会有一些提示,例如:
- “哎呀,你多加了什么请求头,我不能接受呀”
- “哎呀,你地址不是不是写错了,这个uri不存在啊”
- “哎呀,你是不是请求方法错了,这个uri之只能用put而不是post”
- 下面请各位随意补充
- ...
401 Unauthorized
字面意思:未经过认证。一般在后台系统之类的应用里,用户登录之后会获得一个身份认证信息,然后生成 mac
之类的信息,放在请求头的 Authorization
字段里,发送给服务端,如果这个认证信息有问题或者根本没发送,就会出现这个状态码。
403 Forbidden
这个就简单了:禁止访问也就是无权限访问。至于具体为什么禁止,服务器可以在响应内容的实体部分给出,当然也可以不给(没错,我服务端就是这么了不起,为所欲为!)
404 Not Found
很常见了,字面含义,服务端没有找到所请求的资源,经验表明,一般这个错误是客户端的请求url写错了。(别问我怎么知道的)
5xx
5xx表明服务端发生了错误。(真是个令人开心的消息,老板,你看不是我的问题!)
500 Internal Server Error
简单粗暴,服务器故障了。啥?你问我什么故障?我哪知道,我只会熟练地把bug转给隔壁的服务端同学。
503 Service Unavailable
服务器暂时无法使用,可能是维护或者升级,反正无法使用。
小结
本文对常见的一些http状态码和原因做了总结,一方面希望能够给更多入门的同学提供帮助,一方面也做一个归纳总结,方便平时排查bug时速查,文中有一部分可能涉及到了 http头部
的知识,虽然也想尽可能剥离开来,但是为了解释说明没法也确实完全分割开-_-。
惯例:如果内容有错误的地方欢迎指出(觉得看着不理解不舒服想吐槽也完全没问题);如果有帮助,欢迎点赞和收藏,转载请征得同意后著明出处,如果有问题也欢迎私信交流,主页有邮箱地址
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- javascript – 是否可以将ECMAScript 6生成器重置为初始状态?
- javascript – 有可能使用angularJs将状态从状态传递到状态吗?
- 前端状态管理与有限状态机
- 如何可视化需求状态和团队状态?
- 给 DSL 开个脑洞:无状态的状态机
- 基于有限状态机的广告状态管理方案及实现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
内容创业:内容、分发、赢利新模式
张贵泉、张洵瑒 / 电子工业出版社 / 2018-6 / 49
越来越多的内容平台、行业巨头、资本纷纷加入内容分发的战争中,竞争非常激烈。优质的原创性内容将成为行业中最宝贵的资源。在这样的行业形势下,如何把内容创业做好?如何提高自身竞争力?如何在这场战争中武装自己?是每一位内容创业者都应该认真考虑的问题。 《内容创业:内容、分发、赢利新模式》旨在帮助内容创业者解决这些问题,为想要进入内容行业的创业者出谋划策,手把手教大家如何更好地进行内容创业,获得更高的......一起来看看 《内容创业:内容、分发、赢利新模式》 这本书的介绍吧!