周一,npm,这个被广泛使用的小型Node.js软件包管理器,通过用户代理尝试执行该npm install
命令,向连接到注册表的用户简要地返回了一个错误。
这肯定是参考了RFC 2324,错误消息声明为"npm ERR! 418 I'm a teapot…",这是一种在1998年愚人节玩笑话中被创建的滑稽的咖啡壶通信协议。
去年,负责管理IETF HTTP和QUIC工作组的Mark Nottingham呼吁将418 I'm a Teapot
从Node中删除状态代码清除出去,因为418不是公认的HTTP状态代码。
“我知道这很有趣,我知道有一些人为了好玩而打破了实现,但它不应该污染核心协议;如果人们想要玩非标准的语义,他们可以很容易地扩展Node,”他写道。
但其他开发者反对清除幽默状态代码消息,这在Go,Python的Requests库和ASP.NET的HttpAbstractions库中也得到了支持。而Node.js基金会董事会成员James M. Snell最终停止了删除工作。
在两个GitHub问题中引起用户投诉行为的npm错误:#335和#20971。星期一的问题似乎持续了三到四个小时,但问题不在于使用代理服务器的中断时间。相反,npm的管理层缺乏任何明确的声明,导致开发人员抱怨。
有人批评npm应该发布关于这个问题的一些信息,因为公司的状态页面没有关于发生的事情的任何细节。但是,状态页面通常会显示服务器端信息,代理问题与npm客户端将端口附加到Host标头的方式有关。
在给The Register的一封电子邮件中,npm的首席技术官CJ Silverio解释了发生的事情:
星期一,npm的注册表API开始响应具有它无法识别的主机头的请求htcpcp status 418
。
由于支持registry.yarnpkg.com,Cloudflare建议我们应该使用注册表的cname。我们接受了他们的建议,并实施了此项检查。感谢Cloudflare边缘工作者的努力,我们能够完全用JavaScript实现这个主机头部检查,并在对npm注册表的每个请求中执行它。
不幸的是,我们的主机头解析有一个错误。它没有考虑附加到主机名的端口号。因此,通过某些代理访问npm的用户因拒绝通过"I'm a teapot"的信息冲泡咖啡而受到欢迎。这个bug是在npm cli问题跟踪器上提交的。我们星期一早上修好了。
NPM在其不可或缺性方面已经有了一些痛苦的成长(至少对JavaScript开发者来说)。在二月份,它撤销了一个与Linux文件权限混淆的代码修复。一月份,软件包注册局biz在删除被错误标记为恶意软件的代码后道歉。
领取专属 10元无门槛券
私享最新 技术干货