[HTTP-4]-HTTP协议中的状态码(上)

Posted 他们已经在路上了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[HTTP-4]-HTTP协议中的状态码(上)相关的知识,希望对你有一定的参考价值。

咳咳

最近每次发HTTP相关的文章,都会少俩粉丝,怪尴尬的,仔细反思一下,也合理,之前我都是写Axure教程、微信开发、功能设计、竞品分析、用户增长等等与产品经理息息相关的文章,而现在写些什么HTTP,会有读者想了,有用吗???其实我想说,作者超级忙的,可能真的忙到不分昼夜吧,但是呢,依然从没有停下来,一直坚持写,究其根本,大概就是这样几个原因,第一,作者本身的工作内容从传统的互联网到人工智能、智能硬件、AIOT方向转型,因此需要的知识量会更大, 除了互联网本身的知识,还需要一些来自网络底层的知识才能支撑起来工作需求。第二点,随着工作经验的逐步积累,发现停留在应用层其实不能满足未来发展的需求,单纯的产品设计可能很快就会被时代淘汰,所以需要不断的增加自己的知识储备。第三点,当随着能力提升,承担的越多的时候,越是需要面面俱到。

经历了一些摸爬滚打创业公司的启航之路之后,和一些创业的小老板喝酒聊天之后,发现其实小公司没有那么多的资源可以让老板调度,所以也谈不上什么资源整合和组织调度,往往公司出点儿小问题都需要亲力亲为,比如公司断网了,喊电信局的人来修怎么也得小半天,那着小半天也不能不干活了不是,毕竟员工的工资可没有打小半天的折扣呀~再比如电线断了,新的设备着急要用没有网线了,大半夜突然线路故障但是没同事帮忙处理了等等,都需要亲力亲为才能及时解决问题,因此未来想要撑起更广阔的天地,就需要了解的更多,学会的更多。有人也会讲,专家才能立于不败之地,样样都会,样样都不精迟早会凉,这句话也没错,但很多时候现实是残酷的,很少有人可以从一开始就明确自己职业生涯的方向,然后朝着一个方向不断深挖,最后成为一名细分领域的佼佼者,大部分人都是在成长和前进的路上不断的改变,所以我觉得多了解和多学习一些和互联网相关的知识其实蛮好的,即便未来依然会在用户、功能、设计、业务等层面上精进,但是也不影响我们多去了解一些底层的概念和逻辑,正如一句“每一步,都是数”,我们走过的每一步都是我们宝贵的财富,总有一天他会帮助我们度过我们人生路上的困难。共勉,下面进入正题吧~

今天要讲的是HTTP的状态码,HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。让我们通过本章的学习,好好了解一下状态码的工作机制。

1.什么是状态码?

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是否正常处理的请求。
状态码例如200 OK,以3为数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。响应类别有以下5种。

类别 原因短语
1XX Informational(信息性状态码) 接受的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server(服务器错误状态码) 服务器处理请求出错
只要遵守状态码类别的定义,即使改变RFC2616中定义的状态码,或服务器端自行创建状态码都没有问题。
仅记录在RFC2616上的HTTP状态码就达40种,若再加上WebDAV(Web-based Distributed Authoring and Versioning,基于万维网 的分布式创作和版本控制)(RFC4918、5842)和附加HTTP状态码(RFC6585)等扩展,数量就达60余种。其中经常使用的大概有14种,下面就介绍这些具有代表性的状态码。

2.状态码的详解

2XX 成功


2XX 的响应结果表明请求被正常处理了。
(1)200 OK
表示从客户端发来的请求在服务器端被正常处理了。
在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。比如,使用GET方法时,对应请求资源的实体会作为响应返回;而使用 HEAD 方法时,对应请求资源的实体首部不随报文主体作为响应返回(即在响应中只返回首部,不会返回实体的主体部分)。
(2)204 No Centent

代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分,也不允许返回任何实体的主体。。换言之,服务器端请求处理成功,但是没有资源可返回。

比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面 不发生更新。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
(3)206 Partial Content
表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。换言之,客户端只想要一部分,服务器表示明白,客户端是对某一部分的资源的请求。
响应报文中会包含由Content-Range指定范围的实体内容。

3XX重定向


3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。
(1)301 Moved Permanently

永久性重定向。该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。也就是说,如果已经把资源对应的URI保存为书签了,这时应该按Location首部字段提示的URI重新保存。

像下方给出的请求URI,当指定资源路径的最后忘记添加斜杠“/”,就会产生301状态码。
http://example.com/sample
(2)302 Found

临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户本次能使用心得URI访问。

和301 Moved Permanently状态码相似,但302状态码代表的资源不是永久移动,只是临时性质的。换句话说,已移动的资源对应的URI将来还有可能发生改变。比如,用户把URI保存成书签,但不会像301状态码出现时那样去更新书签,而是仍旧保留返回302状态码的页面对应的URI。
(3)303 SEE Other

该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。(资源的URI已更新,服务器端问客户端能否临时按新的URI访问。)

303状态码和302 Found状态码有着相同的功能,但3030状态码明确表示客户端应当采用GET方法获取资源,这点与302状态码有区别。
比如,当使用POST方法访问CGI程序,其执行后的处理结果是希望客户端能以GET方法重定向到另一个URI上去时,返回303状态码。虽然302 Found 状态码也可以实现相同的功能,但这里使用303状态码是最理想的。
(当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST 改成GET,并删除请求报文内的主体,之后请求会自动再次发送。301、302标准是禁止将POST方法改变成GET方法的,但实际使用时大家都会这么做。)
(4)304 Not Modified

该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。(换言之,资源已经找到,但未符合条件请求)

304虽然被划分在3XX类别中,但是和重定向没有关系。
另外,附带条件的请求是指采用GET方法的请求报文中包含If-Match,If-Modified- Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。
(5)307 Temporary Redirect
临时重定向。该状态码与302 Found有着相同的含义。尽管302标准禁止post变换成get,但实际使用时大家并不遵守。
307会遵照浏览器标准,不会从POST变成GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况。

本节就到这里,下节我们讲4XX和5XX的状态码。


以上是关于[HTTP-4]-HTTP协议中的状态码(上)的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议常用状态码

HTTP协议状态码详解(HTTP Status Code)

Http 状态码

http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码

HTTP协议状态码详解(HTTP Status Code)

HTTP协议图--HTTP 响应状态码(重点分析)