418 I'm a teapot

配置反代禁止通过IP访问,之前干脆return 403,这次突发奇想能不能返回 418 I’m a teapot,既表示拒绝又不那么冰冷。

418状态码的描述是这样的:

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.

这份RFC 2324文件发布于1998年的愚人节,描述了一种称为超文本咖啡壶控制协议 (HTCPCP/1.0) 的标准,该标准用于通过HTTP控制咖啡机。当使用茶壶冲泡咖啡时便会返回这个错误。这个滑稽而“无用”的状态码曾被提议删除,save418运动挽救了它,并声称: “We are the teapots.”

当在Nginx返回418状态码时,你只会看到浏览器的报错。nginx中,418并没有像404那样的默认错误页。但我们可以这样配置:

1
2
3
4
5
server {
listen 80 default_server;
default_type text/plain;
return 418 "418 I'm a teapot\n";
}

这样,浏览器收到418的同时,会显示 418 I’m a teapot。

不够优雅?可以这样:

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80 default_server;
location / {
return 418;
}
error_page 418 /custom_418.html;
location = /custom_418.html {
root /var/www/html/errors;
internal;
}
}

对应的html差不多是这样写:

1
2
3
4
5
6
7
<html>
<head><title>418 I'm a teapot</title></head>
<body bgcolor="white">
<center><h1>418 I'm a teapot</h1></center>
<hr><center>don't brew coffee with a teapot</center>
</body>
</html>

让我们像笨蛋一样为这滑稽的举措开怀大笑吧,我们是茶壶!

:-)

参考链接: Implementing HTTP 418 Errors on NGINX