Web・インターネットの用語一覧へ
このページの目次

リクエストボディとは?

読み方:リクエストボディ

最終更新:2026/08/18

3秒でわかる

HTTP リクエストのうち、送るデータ本体が入る部分。POST や PUT で登録内容や更新内容を運び、形式は Content-Type ヘッダで示します。

もう少し詳しく

どういうものか

リクエストボディは、HTTP リクエストの本文にあたる部分である。リクエストはリクエストライン、ヘッダ、空行、ボディの順に並び、この最後がボディになる。

中身の形式は決まっておらず、何で書いてあるかを Content-Type ヘッダで伝える。Web API では application/json が最も多く、HTML のフォーム送信では application/x-www-form-urlencoded、ファイル添付を含む場合は multipart/form-data が使われる。

なぜ必要か

URL に載せられる情報には限りがある。クエリ文字列は長さの上限が実装依存で数千文字しかなく、アクセスログやブラウザの履歴にそのまま残り、リファラとして外部へ漏れることもある。

そのため、新規登録の入力内容やパスワードのような、長さがあり残ってほしくないデータはボディで送る。画像のようなバイナリはそもそもクエリ文字列に載せられない。

具体例

送る側と受ける側を並べる。

// 送る側 ── Content-Type と body の形式を合わせる
const res = await fetch("/api/orders", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ itemId: 12, quantity: 3 }),
});
// 受ける側 (Express) ── パーサを入れて初めて req.body に入る
import express from "express";
const app = express();

app.use(express.json()); // これが無いと req.body は undefined

app.post("/api/orders", (req, res) => {
  const { itemId, quantity } = req.body;
  if (!Number.isInteger(quantity) || quantity < 1) {
    return res.status(400).json({ message: "quantity は 1 以上の整数で指定してください" });
  }
  res.status(201).json({ id: 987, itemId, quantity });
});

つまずきやすいところ

req.body が undefined になる相談が最も多い。原因はたいてい 2 つで、express.json() を入れていないか、送信側の Content-Type が付いていないかである。パーサはヘッダを見て動くので、ヘッダが無い JSON は素通りする。

body に JavaScript のオブジェクトをそのまま渡すのも定番の誤りになる。JSON.stringify() を通さないと [object Object] という文字列が飛ぶ。

multipart/form-data で送る場合は逆に、Content-Type を自分で書いてはいけない。FormData を body に渡すと境界文字列を含むヘッダがブラウザ側で自動生成されるため、手で上書きすると壊れる。

似た用語との違い

運び方書く場所主な用途
リクエストボディ本文登録・更新するデータ、ファイル
クエリパラメータURL の ? 以降検索条件、絞り込み、ページ番号
パスパラメータURL の一部対象の識別子 (/users/42 の 42)
ヘッダヘッダ行認証情報、形式の指定


GET と DELETE にもボディを付けること自体は可能だが、途中の経路で捨てられることがあるため実務では使わない。

知識のつながり

サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

現在地リクエストボディWeb

LEARN BY DOING

この用語を、教材で使ってみる

直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

すべてのコースを見る