是418"我是一个茶壶"真的是一个HTTP响应代码?

Moh*_*han 41 http

是418"我是一个茶壶" 真的是一个HTTP响应代码?

互联网上有各种各样的参考,包括响应代码列表,但我无法弄清楚这是否是一个奇怪的笑话.

wiz*_*lus 37

我使用此代码。我对两个单独的HTTP服务器有nginx反向代理请求。一种处理对未经身份验证的用户的请求,第二种处理对经过身份验证的用户的请求。在这种特定情况下,问题在于第一台服务器是确定用户是否已通过身份验证的服务器。请不要问为什么。

因此,如果第一台服务器确定用户已通过身份验证,则它会做出响应418 I'm a teapot。然后,NGINX在内部将流量重新路由到第二台服务器。就浏览器而言,这只是一个请求。

这符合HTCPCP代码418的精神,因为如果您尝试用茶壶BREW,则适当的响应是“我不是那种可以处理该请求的东西,但可能还有其他东西。” 换句话说,“我是茶壶。找到咖啡壶。” (第二台服务器是咖啡机)。

最终,虽然418在RFC 7231中未明确定义,但仍被的保护层覆盖4xx (Client Error)

6.响应状态码

  • 4xx(客户端错误):请求包含错误的语法或无法满足

6.5。客户端错误4xx

  • 状态代码的4xx(客户端错误)类表明客户端似乎已出错。除响应HEAD请求外,服务器应发送一个包含错误情况说明以及它是暂时还是永久的说明。这些状态代码适用于任何请求方法。用户代理应该向用户显示任何包含的表示。

  • 随着物联网的出现,该协议在某些时候实际上可能是一个可行的协议。如果我曾经做过一个物联网茶壶,你可以放心,我会使用这个协议。 (29认同)
  • 我有一个第三方提供商(一个非常糟糕的提供商),如果您缺少 Accept 标头,他会回答 418。我一直认为这是因为他们太糟糕了,但这实际上解释了发生的事情。尽管如此,仍然不会原谅他们从服务器中泄露状态代码 (3认同)
  • 此状态代码已添加到 Python 3.9 中的标准库模块“http”中。 (3认同)
  • @Hoffmann对于他们来说,响应400错误请求或415不支持的媒体类型可能是适当的,任何4xx代码都表示客户端错误,因此可以这样解释。 (2认同)

Rem*_*eau 28

HTTP响应代码418最初在RFC 2324("超文本咖啡壶控制协议(HTCPCP/1.0)")和RFC 7168("用于茶叶外溢设备的超文本咖啡壶控制协议(HTCPCP-TEA)"协议中定义.

每维基百科:HTTP状态代码列表:#418

这段代码在1998年被定义为传统的IETF 愚人节笑话之一,在RFC 2324,超文本咖啡壶控制协议中,预计不会由实际的HTTP服务器实现.RFC指定此代码应由要求冲泡咖啡的茶壶返回.此HTTP状态在某些网站(包括Google.com)中用作复活节彩蛋.

  • 值得明确的是它不是真正的状态代码.官方列表如下:https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml#http-status-codes-1 (4认同)
  • @ChrisHuang-Leaver 对于占位符,您发现 501 未实现更合适。 (4认同)
  • @Evert 什么会影响 RFC 中的某些内容是否成为“官方”?您能否将您的评论变成答案,以便我可以接受? (2认同)

Pie*_*rde 27

您确实不应该要求 HTTCP(超文本茶壶控制协议)来冲泡咖啡。这是 HTCPCP(超文本咖啡壶控制协议)的工作。


Fia*_*eid 19

在此处输入图片说明

是的,我可以确认,我已经看到 HTTP 418 从真正的生产服务器返回。它确实存在。

  • WebException 类将显示请求中返回的任何响应代码和状态文本。如果响应头的第一行是“432 One Zero”,则消息将为“远程服务器返回错误:(432) One Zero”。了解发生此错误时您正在调用哪个服务器以及它正在运行什么软件可能会更有帮助。 (8认同)

Twi*_*ode 12

是的,这是一个“真实”的代码,因为它实际上是由 Internet 工程任务组作为官方 RFC 发布的,但该 RFC 于 4 月 1 日发布,意思是愚人节玩笑(以及超文本咖啡壶控制的其余部分)协议),而不是为了合法的实现。这就是为什么大多数网站都将它用作复活节彩蛋,但要避免使用它。正如此评论所指出的,通常有更合适的状态,如 400(错误请求)。综上所述,多亏了 IT 社区,它现在是一个保留代码,所以不要指望它很快就会出现在任何地方。

值得注意的是,根据 Larry Masinter(维基百科声称的那个 RFC 的作者)的说法,有问题的 HTTP 扩展实际上确实有一个(讽刺的)目的:“它确定了 HTTP 被不当扩展的许多方式。”


h22*_*h22 5

我认为将 418 视为保留代码更安全,该代码曾经具有半官方含义,但现在正式“未分配”。

我认为,历史上对这些代码的看法与现在有所不同。这在今天听起来既无意义又可笑。可能不是?

换句话说,我会避免使用这段代码。

  • “可能不是”不,实际上这只是一个愚人节玩笑。那些没有注意 RFC 发布的人可能会认为这是一件严重的事情! (2认同)

Pet*_*sen 5

我实际上用它。在我的项目中,我们有一个后端和一个前端,如果我正在开发一个新的 API,我会使用 418 来表示“不可能在前端发出的错误请求”。它们现在会在我们的错误报告工具中触发严重级别为“警告”的事件,而标准 400 仅在级别“信息”时触发。

我不想使用 500,因为它是调用者的错误,而且我不认为它是常规的 400,因为我们有很多情况,后端正在处理验证,而 400 不是错误。我们本来可以使用 501,但它位于 4xx 中,因为它是请求错误。

  • 我喜欢人们不遗余力地证明你不应该返回此状态代码。和您一样,我将它用于不良请求,但特别是永远不应该从前端或使用我的 API 的应用程序发出的请求。根据经验,我知道这些都是来自黑客通过 SQL 注入尝试探测我的 API。我曾经返回 200 和一个空的主体,但这似乎更合适(状态 418 具有短而粗的主体)。玩愚蠢的游戏,赢得愚蠢的奖品。 (6认同)
  • “我实际上使用它” - 是的,您可以根据需要使用任何其他状态代码。但这并不意味着它成为官方响应代码。请查看其他答案,其中提供了包含代码的官方文档的链接 (3认同)