O hirunewani blog

Q. npm publishで429 Too Many Request エラーが返ってくる

Created at

npm publishで429 Too Many Request エラーが返ってくる問題について調査した結果をまとめた。

Table of Contents

相談を受けたが、当時のNode.jsのバージョンやnpmのバージョンが不明であったため、特に問題のある操作をしていない前提で調査を行った。ただし恐らく既にEOLになっていたNode.js v14を利用していたと思われる。

調査結果

少なくともnpm v6(Node.js v14)では、アクセストークンが間違っていた場合やログインに失敗した場合、npm publishは429エラーを返すことが分かった。

以前、npmはRefererヘッダーを使用して特定のリクエストの原因になったコマンドを示す特別な値を送信していたが、 CloudflareなどのプロキシサーバーがHTTPヘッダーの特殊な仕様を悪意あるリクエストとして見做すようになり、429エラーが返されるようになったという経緯があるようだ。

https://github.com/npm/cli/issues/836#issuecomment-589404272

これは、Refererヘッダーを使用しなくなったnpm-registry-fetch ≥ 8.0.0を使用するnpm ≥ 7.0.0(Node.js ≥ v15)では発生しなくなっている。

https://github.com/npm/npm-registry-fetch/commit/ebddbe78a5f67118c1f7af2e02c8a22bcaf9e850