HTTP 204 No Content

意図的に空のボディを持つ成功レスポンス — リクエストは成功しましたが、返すべき内容が単にありません。

HTTP 204 の意味

HTTP 204 No Content は、200 とまったく同様に成功を示しますが、レスポンスには意図的にボディがありません。DELETE リクエストに対する慣用的な回答であり、オブジェクトを返しても冗長になる PUT/PATCH の更新や、ビーコンやロギング用エンドポイントにも適しています。

204 にはボディが含まれてはならないため、クライアントコードで 204 レスポンスを JSON パースしようとすると(例えば fetch の後に response.json() を呼び出すと)例外が発生します — これは非常によくあるバグです。パースする前にステータスを確認してください。

204 レスポンスのよくある原因

  • DELETE リクエストがリソースを削除しました。
  • PUT または PATCH がリソースを更新し、サーバーはそれをそのまま返さないことを選択しました。
  • データを記録するだけのエンドポイント(分析ビーコン、ヘルスチェック)が受信を確認しました。

開発者向けの推奨プラクティス

  • 204 にレスポンスボディを含めないでください。多くのサーバーやプロキシは、含まれていると接続を切断します。
  • クライアントコードでは、.json() や .text() を呼び出す前にステータス 204 で分岐してください。
  • クライアントが更新後の表現を必要とする場合は、204 の代わりにボディ付きの 200 を返してください。

レスポンス例

HTTP/1.1 204 No Content
日付: Thu, 02 Jul 2026 10:00:00 GMT

よくある質問

204 と、空のボディを持つ 200 の違いは何ですか?

実質的には同じように動作しますが、204 は明示的です。ボディが存在しないのは意図的であり、クライアントはそれをパースしようとするべきではありません。

204 で response.json() が失敗するのはなぜですか?

204 レスポンスにはボディが一切なく、パースするものがありません。パースする前に response.status === 204 を確認してください。

DELETE は常に 204 を返すべきですか?

最も一般的な選択です。クライアントが削除内容の詳細を必要とする場合は、確認用のボディを付けて 200 を返すことも有効です。