416 Range Not Satisfiable

要求されたバイト範囲がファイルの範囲外です。

使いどころ

リソースの末尾を超えた Range リクエスト。

よくある原因と対処法

Range ヘッダーが、サーバーにないバイト(通常はファイルの末尾より後ろ)を要求しています。典型的な原因は、ローカルのファイルが既に完全なのに curl -C - や wget -c でダウンロードを再開した場合や、リモートのファイルのサイズが変わった場合です。サーバーは Content-Range: bytes */size で応答するので、クライアントは実際の長さを知ることができます。

部分的にダウンロードしたファイルを削除して最初からやり直すか、先にサイズを比較して対処します。ストリーミング中にファイルが差し替えられたり、CDN が古くて短いバージョンをキャッシュしていたりすると、動画プレーヤーで 416 が発生します。その場合はキャッシュをパージしてください。クライアントは ETag 付きの If-Range を送るべきです。そうすれば、ファイルが変更されていた場合は 416 ではなく完全なコンテンツが 200 で返ります。サーバーが Range を無視して 200 を返すこともあります。

クライアントエラー (4xx)

4xx はクライアントエラーです。リクエスト自体が誤っている、認証されていない、または存在しないものを指しています。同じリクエストを再試行しても解決しません。

レスポンスでの表示

HTTP/1.1 416 Range Not Satisfiable

返し方

Node.js / Expressres.status(416).end()
Python / Flaskreturn '', 416
nginxreturn 416;

確認方法

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP ステータスコードを開く