作者: 何梦洋
本文为原创内容转载请联系授权
微信:HMYang33
昨天没穿厚衣服就出门刮了一阵冷风,今天发烧可把我难受坏了,一整天都是头晕发烧,甚至感觉眼前的画面有点“掉帧”。最难受的时候全身酸疼,也没胃口吃饭,去诊所排了老长的队才买到药。不过还好不是阳性,只是小感冒。希望各位读者以我为鉴,出门穿点厚衣服,戴好口罩,家中备好发烧药物。
MDN对418状态码的解释
418状态码是我今天逛mdn的时候发现的,介绍也特别有趣:我是一个茶壶。 好奇心驱使我就点开了详细介绍:
介绍就两句,确实读不懂。怎么办?你为什么不问问神奇海螺chatGPT呢?
询问chatGPT
以下是chatGPT的回答:
HTTP 状态码 418,也被称为“我是茶壶”错误码,是一种幽默的响应码,用于表示您尝试访问的服务器是一个茶壶,因此无法满足请求。该代码是一个玩笑,不应被认真对待。它是作为超文本咖啡壶控制协议(HTCPCP)的一部分而推出的,HTCPCP 是一种对 HTTP 协议的幻想扩展,于 1998 年作为愚人节的玩笑被创建。虽然这不是一个广泛使用的代码,但某些 Web 服务器仍可能会在响应某些请求时返回 418 响应码。
好家伙难道有人试着拿茶壶做服务器?育碧的土豆好歹有个电流,茶壶是什么鬼啊,于是我继续追问HTCPCP全称是是什么:
超文本咖啡壶控制协议(Hyper Text Coffee Pot Control Protocol,简称 HTCPCP)
嗯,能看出来和咖啡有点关系,那1998年发生了什么有趣的故事呢?又为什么会选择418这个状态码呢?打开咕噜咕噜搜索一番先找到了一个HTCPCP协议详细介绍的网站: www.rfc-editor.org/rfc/rfc2324
HTCPCP协议中对418状态码的解释
2.3.2 418 I'm a teapot
Any attempt to brew coffee with a teapot should result in the error code "418 I'm a teapot". The resulting entity body MAY be short and stout.
任何想用茶壶冲泡咖啡的结果中都应返回错误"418 我是一个茶壶"
我是一个茶壶,你干嘛拿我泡咖啡?
为什么会选择418这个状态码
关于这个问题我浏览了很多文章,得到的答案只有一个为了萌混过关。只是为了看起来和其他状态码差不多,就排在417之后。
这个状态码曾用在什么场景下?
答案是,没有!但是有些人的服务器把这个状态码返回给爬虫小子,属于是给爬虫开的一个玩笑。
为什么不移除这个没用的状态码?
关于418的战争有很多,有人曾给nodejs提过这个issue,希望删除这个状态码,也有人专门做了一个网站save418.com 恳求保护418。最终nodejs选择保留了这个状态码。
如何在服务器端使用418状态码并返回给客户端
直接看代码
require("http").createServer().on("request",
function(req,res){
res.writeHead(418)
res.end("我是个茶壶")
}
).listen(80)
我能否自己定义一个有趣的状态码?
以下代码我定义了一个666状态码,用于告诉客户端你是一个机器人,不是一个正常人类的请求。当然这个服务器并没有真正地判断过请求是否为真人,只是无脑返回这个状态码罢了。实际业务中需要很复杂的判断。
const http=require("http");
http.STATUS_CODES[666]="you are a robot.";
http.createServer().on("request",
function(req,res){
res.writeHead(666)
res.end()
}
).listen(80)