<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <dfn><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">429</anchor></code></dfn> (<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Too Many Requests</anchor></dfn>)
は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>数の上限 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rate limit</anchor>) に達したことを表します。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <strong><cite xml:lang="en">RFC 6585 - Additional HTTP Status Codes</cite> (<time>2012-05-03 01:56:08 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc6585#section-4">https://tools.ietf.org/html/rfc6585#section-4</anchor-external></strong></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <cite xml:lang="en">RFC 6585 - Additional HTTP Status Codes</cite> (<time>2015-11-02 08:48:01 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://tools.ietf.org/html/rfc6585#section-7.2">http://tools.ietf.org/html/rfc6585#section-7.2</anchor-external></li></ul></refs></section><section><h1>意味</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">429</anchor></code> は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>がある<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">時間</anchor>内に送信した<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>が多すぎることを示します
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>の特定や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>の数の数え方は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様</anchor>では規定されていません
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用</anchor>依存の方法で計測・制限できます。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <code xmlns="http://www.w3.org/1999/xhtml"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">429</anchor></code> を使うのは義務ではありませんから、
単に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP接続</anchor>を閉じたりしても構いません <src><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;15</anchor-internal></src>。</comment-p></section><section><h1>構文</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">表現</anchor>は、条件の詳細を含める<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">べきです</strong></anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> 例えば <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">英語</anchor>で記述できます <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>には <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Retry-After:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>を含めることができます
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。</p></section><section><h1>処理</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">キャッシュ可能</anchor>ではありません <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。</p></section><section><h1>文脈</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web API</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>で、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">API</anchor> の利用頻度制限に達した時に処理を拒むことを示すために使われることがあります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> 契約や設計に基づく上限ではなく、意図しない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>側の資源不足によって処理できない状況にあるときは、
<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">503</anchor></code> を使うのがより適切と思われます。</p></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <code>X-Rate-Limit-<var>*</var>:</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>とよく併用されます。</p></section><section><h1>歴史</h1><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <cite xml:lang="en">Platform API Reference | Heroku Dev Center</cite>
(<time>2015-03-06 08:11:26 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://devcenter.heroku.com/articles/platform-api-reference#error-response">https://devcenter.heroku.com/articles/platform-api-reference#error-response</anchor-external></figcaption><blockquote><p>HTTP/1.1 429 Too Many Requests</p><p>{</p><p>&quot;id&quot;:       &quot;rate_limit&quot;,</p><p>&quot;message&quot;:  &quot;Your account reached the API rate limit\nPlease wait a few minutes before making new requests&quot;,</p><p>&quot;url&quot;:      &quot;https://devcenter.heroku.com/articles/platform-api-reference#rate-limits&quot;</p><p>}</p></blockquote></figure><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <cite xml:lang="en">Dropbox - Core API - endpoint reference</cite>
(<time>2015-03-06 09:06:28 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.dropbox.com/developers/core/docs">https://www.dropbox.com/developers/core/docs</anchor-external></figcaption><blockquote><p>429	Your app is making too many requests and is being rate limited. 429s can trigger on a per-app or per-user basis.</p></blockquote></figure><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <cite>HTTP API - Guide - SoundCloud Developers</cite>
(<time>2015-03-29 18:46:42 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://developers.soundcloud.com/docs/api/guide#errors">https://developers.soundcloud.com/docs/api/guide#errors</anchor-external></figcaption><blockquote><p>429 Too Many Requests	To keep the amount of spam on SoundCloud as low as possible, our API limits the rate at which you can perform certain actions.</p></blockquote></figure><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <cite>Gnip Support</cite>
(<time>2015-03-25 07:16:06 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://support.gnip.com/apis/powertrack/api_reference.html">http://support.gnip.com/apis/powertrack/api_reference.html</anchor-external></figcaption><blockquote><p>429	Rate Limited	Your app has exceeded the limit on connection requests.</p></blockquote></figure><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <cite xml:lang="en">Uber API Reference Guide</cite>
(<time>2015-09-25 03:53:01 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://developer.uber.com/v1/api-reference/">https://developer.uber.com/v1/api-reference/</anchor-external></figcaption><blockquote><p>429	Too Many Requests. Rate limited.</p></blockquote></figure><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <cite xml:lang="ja">IIJmioクーポンスイッチAPI | クーポンについて | IIJmio</cite>
(<time>2016-01-23 10:47:50 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.iijmio.jp/hdd/coupon/mioponapi.jsp">https://www.iijmio.jp/hdd/coupon/mioponapi.jsp</anchor-external></figcaption><blockquote><p>429	Your application sends too many requests	X-IIJmio-Developer ヘッダに指定されたデベロッパIDを持つアプリケーション全体からのリクエスト数が上限を超過した</p><p>429	You send too many requests	X-IIJmio-Authorization ヘッダに指定されたユーザからのリクエスト数が上限を超過した</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <cite xml:lang="en">HTTP 429: Too Many Concurrent Connections · Bonsai</cite>
(<time>2018-01-06 01:15:33 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://docs.bonsai.io/docs/troubleshooting-http-error-codes">https://docs.bonsai.io/docs/troubleshooting-http-error-codes</anchor-external></p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <cite>python3 - HTTP Error 429: Too Many Requests - youtube-dl stopped working - Ask Ubuntu</cite>
(<time>2020-03-11 22:05:26 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://askubuntu.com/questions/1181500/http-error-429-too-many-requests-youtube-dl-stopped-working">https://askubuntu.com/questions/1181500/http-error-429-too-many-requests-youtube-dl-stopped-working</anchor-external></figcaption><blockquote><p>For me the problem solved when I upgraded to kernel 4.14.150 ...</p><p>(both 4.14.148 and 4.14.149 had the same problem)</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> 
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;22</anchor-internal> は <code>youtube-dl</code> での報告ですが、
それだけの問題ではなくて、
<CDOE xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">curl</anchor> --dump-header - https://www.youtube.com/watch</CDOE>
でも再現するようです。
<code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">curl</anchor> --dump-header - https://www.youtube.com/</code>
では発生しません (<code>200</code>)。
そして同じ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LAN</anchor> に接続された別の環境で同時に実行したらそちらは
<code>200</code>。
なので<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ネットワーク</anchor>の問題や、サーバー側の規制ではないということです。
駄目な環境だと、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Python</anchor>
でも
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">curl</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP/2</anchor>)
でも、他の言語で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">socket</anchor> を読み書きするプログラムを書いても
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP/1.1</anchor>)
再現します。
駄目な環境といっても、つい先日まで普通に動いていた環境でした。</p><p>こうなると <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TCP</anchor> か <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TLS</anchor> のレベルで問題があると考えざるを得ません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Google</anchor> のサーバーなら変なことをしている可能性は十分あり得ます。
システムの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenSSL</anchor> と別にコンパイルした <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LibreSSL</anchor>
を使っても同じだったので、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TLS</anchor> でなく <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TCP</anchor>
かもしれません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Linux</anchor> カーネル依存という報告とも整合します。
長時間使い続けるとか、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TCP</anchor> セッション数が一定数を超えるとかで、
相性問題が起こるのかもしれません。
<time>2020-03-11T13:29:05.000Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> 
TCP <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fingerprinting</anchor>
で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IPアドレス</anchor>以外の要素も使って規制しているのかも?</p></section></body></html>