[2] 429
(Too Many Requests)
は、要求数の上限 (rate limit) に達したことを表します。
[10] 応答の表現は、条件の詳細を含めるべきです >>1。
[11] 応答には Retry-After:
ヘッダーを含めることができます
>>1。
[18] Web API サーバーで、 API の利用頻度制限に達した時に処理を拒むことを示すために使われることがあります。
[19] 契約や設計に基づく上限ではなく、意図しないサーバー側の資源不足によって処理できない状況にあるときは、
503
を使うのがより適切と思われます。
[8] X-Rate-Limit-*:
ヘッダーとよく併用されます。
[21] HTTP 429: Too Many Concurrent Connections · Bonsai () https://docs.bonsai.io/docs/troubleshooting-http-error-codes
[23]
>>22 は youtube-dl
での報告ですが、
それだけの問題ではなくて、
curl --dump-header - https://www.youtube.com/watch
でも再現するようです。
curl --dump-header - https://www.youtube.com/
では発生しません (200
)。
そして同じ LAN に接続された別の環境で同時に実行したらそちらは
200
。
なのでネットワークの問題や、サーバー側の規制ではないということです。
駄目な環境だと、
Python
でも
curl (HTTP/2)
でも、他の言語で socket を読み書きするプログラムを書いても
(HTTP/1.1)
再現します。
駄目な環境といっても、つい先日まで普通に動いていた環境でした。
こうなると TCP か TLS のレベルで問題があると考えざるを得ません。 Google のサーバーなら変なことをしている可能性は十分あり得ます。 システムの OpenSSL と別にコンパイルした LibreSSL を使っても同じだったので、 TLS でなく TCP かもしれません。 Linux カーネル依存という報告とも整合します。 長時間使い続けるとか、 TCP セッション数が一定数を超えるとかで、 相性問題が起こるのかもしれません。
[25] TCP fingerprinting で IPアドレス以外の要素も使って規制しているのかも?
429
を使うのは義務ではありませんから、 単にHTTP接続を閉じたりしても構いません >>15。