リクエストボディがサーバーの受け付けるサイズを超えています。
使いどころ
サイズ上限を超えるアップロード。
よくある原因と対処法
ボディがどこかの層の上限を超えており、その層はアプリではないことがよくあります。nginx は client_max_body_size をデフォルトで 1m に設定しているため、http、server、location ブロックのいずれかで引き上げるまで、1 MB を超えるアップロードは 413 で失敗します。Cloudflare は Free と Pro プランでリクエストボディを 100 MB に、AWS API Gateway は 10 MB に、Lambda の同期呼び出しのペイロードは 6 MB に制限しています。
次にアプリを確認します。Express の express.json はデフォルトで 100kb に制限されており、PHP には upload_max_filesize(デフォルト 2M)と post_max_size(8M)があります。制限を変更したら、nginx や PHP-FPM のリロードを忘れないでください。大きなファイルは、経路上のすべての制限を引き上げるのではなく、署名付き URL でオブジェクトストレージに直接アップロードするか、チャンクに分割してアップロードしましょう。
クライアントエラー (4xx)
4xx はクライアントエラーです。リクエスト自体が誤っている、認証されていない、または存在しないものを指しています。同じリクエストを再試行しても解決しません。
レスポンスでの表示
HTTP/1.1 413 Content Too Large返し方
| Node.js / Express | res.status(413).end() |
|---|---|
| Python / Flask | return '', 413 |
| nginx | return 413; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/