要求されたバイト範囲がファイルの範囲外です。
使いどころ
リソースの末尾を超えた 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 / Express | res.status(416).end() |
|---|---|
| Python / Flask | return '', 416 |
| nginx | return 416; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/