HTTP状态码 418 I'm a teapot

14,870 阅读3分钟

作者: 何梦洋

本文为原创内容转载请联系授权

微信:HMYang33

昨天没穿厚衣服就出门刮了一阵冷风,今天发烧可把我难受坏了,一整天都是头晕发烧,甚至感觉眼前的画面有点“掉帧”。最难受的时候全身酸疼,也没胃口吃饭,去诊所排了老长的队才买到药。不过还好不是阳性,只是小感冒。希望各位读者以我为鉴,出门穿点厚衣服,戴好口罩,家中备好发烧药物。

MDN对418状态码的解释

418状态码是我今天逛mdn的时候发现的,介绍也特别有趣:我是一个茶壶。 好奇心驱使我就点开了详细介绍:

Snipaste_2022-12-12_15-16-38.png

介绍就两句,确实读不懂。怎么办?你为什么不问问神奇海螺chatGPT呢?

询问chatGPT

Snipaste_2022-12-12_15-16-38.png

以下是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)

Snipaste_2022-12-12_15-16-38.png

我能否自己定义一个有趣的状态码?

以下代码我定义了一个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)

Snipaste_2022-12-12_15-16-38.png