404
Not Found

平时上网最讨厌看到啥?
应该是这货没啥争议 ↓↓
Snipaste_2018-01-17_12-25-09.png
这几乎是互联网时兴以来,每个人都无法避免会遇到的问题。
404 这三个数字好像网络之神赐给每个信众的礼物~
无论你是亿万富翁还是国家总统,网页打不开就是打不开,啥招也没用。。
Snipaste_2018-01-17_12-25-52.png
可是,为什么网页打不开,网页上都会显示 404 呢?
传说,互联的发明者蒂姆·伯纳斯-李( Tim Berners-Lee )曾经在瑞士的欧洲核研究组织的 404 房间办公,在这个 404 房间有互联网时代的第一个服务器,人们所有的网络请求都会发向那里。
Snipaste_2018-01-17_12-26-28.png
如果你要访问的网络内容不存在,那个服务器就会给你返回 404 Not Found( 404 找不到资源)。。
也不知道这个来由是从哪冒出来的,反正越传越广,最后连互联网的发明者罗伯特·卡利奥(Robert Cailliau)都不得不站出来澄清:造谣也要遵循基本法好吧,404 就是因为按顺序轮到 404 了而已。。
其实,现在互联网网页都遵循 HTTP 协议(HyperText Transfer Protocol,超文本传输协议),我们每个人需求的网页内容都存储在一个个服务器上,这些储存着 HTML 文件和图像。
当服务器检测到有用户给它发送打开网页的请求,服务器就会返回给那个用户一些东西,包括网页状态以及返回的内容(如请求的文件、错误消息、或者其它信息)。
Snipaste_2018-01-17_12-27-31.png
上面这个图,就是一个 HTTP 返回的例子,那个红框框起来的,里面有一个东西叫做 “ 返回状态码 ”,这个返回状态码就代表了这个网页状态。
譬如,这个例子的网站的返回码是 200,也就是说,这个网站能够被成功访问~
Snipaste_2018-01-17_12-28-14.png
估计大家也看到了,4 开头的状态码就是错误码,返回 4XX 的,这个网页肯定打不开~
404 就是其中一种错误的代号。。
当服务器找不到用户请求的网页数据,而且并不知道错误原因,才会显示返回一个 404。
Snipaste_2018-01-17_12-30-26.png
出现 404 错误之后,网页显示什么内容,全看状态后面跟着什么消息体(看上面倒数第三个图)。有的网站就写着 “ 网页找不到 ”,而有的网站就会埋一些彩蛋~
11120.gif
去年 9 月有网友发现,在 Magic Leap 写着 “ 错误 404 ” 的页面上,一个电灯泡闪烁的频率为摩斯密码,破译后得出的结果正好是鲸鱼座中一颗星星的准确坐标,而这颗星星在每年12月时最明显,网友得出结论: Magic Leap 产品可能会在 12 月正式亮相!果然,Magic Leap 在去年 12 月发布了第一款产品。。(这特么也可以??)
那网页出现 404 就一定是因为服务器无法找到用户请求么?
天真!
也有可能服务器了解你的请求,服务器也有相应的内容,但由于某种奇怪的原因,它被禁止回应你的请求。
这时候本来服务器应该回一个 403 和无法返回数据请求的原因,但是它肯定不想被你发现它故意不给你数据,所以,它很有可能就回你一个 404 Not Found,假装自己没有这个数据。。
Snipaste_2018-01-17_12-33-43.png
不只是 403 ,还有 500 (服务器遇到意外情况,unexpected condition..),都有可能因为服务器懒得跟你解释发生错误的原因,就干脆甩给你一个 404 错误。。
Snipaste_2018-01-17_12-34-16.png
是不是突然想明白好多事?
就像前面说的一样, 404 只是 HTTP 协议里面的一种返回码,这些返回码能让开发者知道网络连接错误的原因。
如果你想在国内看 YouTube 等网站,浏览器会显示 “ 无法访问此网站 ”
Snipaste_2018-01-17_12-35-00.png
这种情况下,我们根本无法连接到相应的服务器上,连返回的状态码都没有。。
这个完全可以通过浏览器自带的开发者工具看出来~
Snipaste_2018-01-17_12-35-38.png
打个比方,使用不了谷歌好像是你的电话线被拔了,电话根本打不出去;而 404 好比是你电话打出去了,可是那头跟你反馈用户无法接通。。
所以说上不了谷歌和 404 压根一点关系都没有,是你的网不够科学~
HTTP 协议里一共规定了 66 个标准 HTTP 状态返回码,每个都有自己的场景应用,可是有一个是异类。。
418 返回码!
Snipaste_2018-01-17_12-36-23.png
I'm a teapot?我是个茶壶??
WTF??
其实,这是 1998 年愚人节的时候发布的一个搞笑 RFC 协议(RFC 2324 - Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)),超文本咖啡壶控制协议。
里面主要围绕一个论题展开:虽然咖啡无处不在,但如果你给一个茶壶发送泡咖啡的请求,那肯定是不行的。。
鬼知道这些程序员都在想些什么奇怪的东西。。。
如果你一定要给茶壶发送这个请求,茶壶就会给你返回一个 “ I'm a teapot ” 的错误码 418 ,表示我只是一个茶壶,并不能泡咖啡~
Snipaste_2018-01-17_12-37-35.png
就这么一个愚人节玩笑,那帮技术宅居然一本正经的写了 10 页文档(网址在这,自己戳:https://tools.ietf.org/html/rfc2324)。。
更骚的是,他们还出了续集。。
因为之前那个 RFC 2324 超文本咖啡壶控制协议只描写了对咖啡壶的规范,这对只喝茶的人赤裸裸的歧视!
所以,2014 年愚人节,他们又发布了 RFC 7168(The Hyper Text Coffee Pot Control Protocol for Tea Efflux Appliances),超文本咖啡壶控制协议之茶版本扩展。
Snipaste_2018-01-17_12-39-16.png
里面详细的描述了如何使用联网设备,实践各种各样复杂的茶冲泡工艺。
连里边放的调味种类分类都细致的不行。。
Snipaste_2018-01-17_12-39-49.png
服了。。只提一个小小的建议,貌似这里冲茶的工艺有些偏西方,大部分中国人是没有在茶里面放糖的习惯,所以我建议对泡茶种类做一个划分,什么铁观音、大红袍、普洱之类的。
今年愚人节再出一个补充版吧~
Snipaste_2018-01-17_12-40-39.png
有人问了, HTTP 返回码就已知的那么几个么?
当然不是了。。其实只要程序员有心,他可以自己自定义好多非标准的返回码,只要客户端和服务端都认识就行。
当然,国内经常见到的这种图。。
Snipaste_2018-01-17_12-41-35.png
这个吧,是你搜的东西不够科学~
“ 404 万岁 ”