HTTP 请求和脱单过程很像,不信你看这个漫画…

HTTP 请求和脱单过程很像,不信你看这个漫画…

一年一度的2月14虐狗节又到了,不知道各位程序员是否已经成功捕获了心仪的妹子/汉子陪自己过年呢?


如果你的答案是没有,如果你想要获得一个对象,那你就得先发出一个请求,然后满心期待地等着看ta的回答… 你看,这是不是跟 HTTP (超文本传输协议)的请求过程非常像呢?


正如ta给你的回答可能是“好的”、“不行”、“呵呵”以及“你是个好人”,当你在浏览器里输入一串网址,按下回车将请求发送给服务器的时候,你的浏览器也将收到服务器返回的各种不同的状态码,由三个数字组成,代表了各种各样的意义。


那,我们就以情人节的浪漫求爱为背景,详细聊聊ta(服务器)给你的回答都是些啥意思吧~


状态码 200:美好结局


返回 200 系列的代码基本表示一切都很OK。请求已成功被服务器接收、理解、并接受,服务器也没有什么问题。于是这个 URL 返回状态码 200 。






不管对浏览器和服务器,还是对程序员和ta的对象,这都是个完美的结局

状态码 300 系列:重定向


300 系列的状态码表示客户端需要采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。


普通的人类用户大约永远也不会直接看到 300 状态码,因为浏览器将会自动完成重定向任务。然而, 300 状态码对搜索引擎还是很重要的,所以开发者应当小心选择正确的状态码。









302、303、307三个状态码之间还是有一些微妙的差别的,在漫画里很难表达。


简单说来,当最早制定 302 状态码的时候,主流浏览器的实现方法有误,为了区分正确的302和错误的302,又创造了 303 和 307 等用法不同的状态码。






这图没能很好地体现出 304 的好处所在,因为正常人一般都是回答“好啊”


但是对浏览器来说, 304 还是很有用的,因为这代表资源未被修改。在这种情况下,由于客户端仍然具有以前下载的副本,因此不需要重新传输资源。



状态码 400 系列:客户端错误


这类的状态码代表了客户端提出的请求看起来可能发生了错误,妨碍了服务器的处理。有可能是浏览器本身,或者使用的 URL 的问题。











404 应该是大家最耳熟能详的错误代码了吧。许多人可能把它理解成“这个页面不存在”和“这个页面已经被删除了”的意思,然而事实上,这个状态码并不代表该页面是否曾经存在,也没有暗示它之后会不会回来。











不像臭名昭著(划掉)著名的 404,410 意味着某个页面曾经存在,但现在已经被永久删除,而且不太可能再取回。如果你永久删除了网站上的某个页面,用 410 比用 404 更有道理一点。







状态码 500 系列:服务器错













Epilogue 片尾彩蛋


本操作码是在1998年作为 IETF 的传统愚人节笑话, 在“RFC 2324超文本咖啡壶控制协议”中定义的,并不需要在真实的 HTTP 服务器中定义。当一个控制茶壶的 HTCPCP 收到 BREW 或 POST 指令要求其煮咖啡时应当回传此错误。后来,在2014年愚人节,他们又发布了一个恶搞 RFC 7168,正式支持茶壶。




HTCPCP 服务器其实是个茶壶,这个答复可能是由一个又矮又胖的东西发出的。


看完这些漫画之后,是不是觉得 HTTP 状态码的意义不那么枯燥了?希望情人节这天,你也能对你的“服务器”发来的“返回值”有更多的了解,早日从404 变成 200 !


文/ Hani Lim
译/ 欧剃
来源/ medium


发布于 2018-02-14