はじめに
以前、『HTTP通信の仕組みと流れ』において、HTTP通信の全体像について解説しました。
この通信の中核を担っている、HTTPリクエストとHTTPレスポンスを中心に解説しましたが、共通しているで使用されている「ヘッダー(Header)」と「ボディ(Body)」については簡単に触れるにとどまりました。
この記事では、HTTPリクエストのヘッダーとボディの仕組みについて、以前の記事より深掘りして解説していきます。
HTTPリクエスト・レスポンスの構造
まず、HTTP通信にはクライアントからサーバーに処理の依頼をするHTTPリクエストと、サーバーからクライアントへ結果を返すHTTPレスポンスがあります。
流れは以下の図のとおりです。
※https://shukapin.com/infographicIT/http より
このリクエストとレスポンスには、共通してヘッダーとボディがあります。
ヘッダー(Header)
※https://softuni.org/dev-concepts/everything-you-need-to-know-about-http-protocol/ より
HTTPリクエストは、リクエストライン(メソッドやURLなど)・HTTPヘッダー(メタデータ)・HTTPボディ(データ本体)の主に3つによって構成されています。
この中の HTTPヘッダー は、「メタデータ(=データに関するデータ)」を含む部分であり、リクエストやレスポンスに関する付加的な情報をクライアントとサーバー間でやりとりします。
各ヘッダーは「フィールド名: 値」の形式で記述され、代表的なものには次のようなものがあります。
・Host: 接続先ホスト名(バーチャルホスト対応のため必須)
・Content-Type: ボディのデータ形式(例:application/json)
・Authorization: 認証情報(例:Bearerトークン)
・User-Agent: クライアントソフトウェアの情報(例:ブラウザ名)
・Accept: クライアントが受け入れ可能なレスポンス形式
リクエスト時の主なヘッダー
クライアント(ブラウザやアプリ)は、リクエストヘッダーを通じてサーバーに対し「どのようなリクエストなのか」を伝えます。たとえば以下のようなものがあります。
・Accept ヘッダー:クライアントが受け取りたいデータの形式(例:JSON, HTML)を指定します。
・Content-Type ヘッダー:クライアントが送信するデータの形式(例:JSON, フォームデータ)をサーバーに伝えます。
※ Content-Type や Content-Length は、POSTやPUTなど、リクエストボディを含む場合に特に重要です。
レスポンス時の主なヘッダー
リクエストヘッダーの内容によって、サーバーは以下の情報などを判断し、レスポンスを生成します。
・どんな形式でレスポンスを返すべきか
・リクエストされたデータをどう解釈すべきか
・クライアントにアクセス権があるかどうか
・どんな種類のデバイスか(表示を変えるかどうか)
サーバーからのレスポンスにもヘッダーが含まれており、たとえば以下のようなヘッダーを持ちます。
・Content-Type: レスポンスボディの形式を示し、クライアントはこの情報をもとにデータを解析します。
・Content-Length: レスポンスボディのサイズを示し、進捗表示や通信管理に利用されます。
これらの情報により、クライアントはレスポンスを正しく処理できます。
ボディ(Body)
HTTPボディ は、やり取りされる実際のデータの本体が含まれる領域です。
リクエスト時のボディ
クライアントからサーバーにPOSTメソッドなどによってデータを送る際、ボディには次のような内容が含まれます。
・フォームから送信されたデータ(例:名前、メールアドレスなど)
・JSON形式のデータ(例:{"title": "記事タイトル", "body": "本文"})
・ファイル(画像、PDFなど)
ボディに含まれるデータの形式は、Content-Type ヘッダーで指定します。
Content-Type: application/json
{
"username": "taro",
"password": "1234"
}
サーバーは Content-Type を参照して、送られてきたデータを正しく解析します。
レスポンス時のボディ
サーバーからのレスポンスボディには、クライアントに返すべき実際のコンテンツが含まれます。
・HTML(Webページの内容)
・JSON(APIのレスポンス)
・ファイルデータ(画像やPDFなど)など
サーバーは Content-Type を使って、クライアントにボディの形式を伝えます。
Content-Type: application/json
{
"message": "ログイン成功",
"token": "abcdef123456"
}
クライアントはこのボディを解析し、画面表示や次の処理に活用します。
HTTPボディは、リクエストやレスポンスの中身を実際にやり取りする部分ということです。
まとめ
HTTPリクエストのヘッダーとボディは、ただの文字列ではなく、クライアントとサーバーの通信のルールを担う重要な情報のかたまりです。
リクエスト全体の構造を理解し、どのヘッダーに何の情報を含め、どう扱うかを正しく判断する力が不可欠になります。そのための理解の助けに少しでもなれば幸いです。
最後までお読みいただき、ありがとうございました。
参考・画像引用元URL
https://developer.mozilla.org/ja/docs/Web/HTTP/Guides/Messages
https://qiita.com/growsic/items/7b0b461303fd1e8995f2
https://medium.com/@tpsmith1992/headspace-a-closer-look-at-the-http-header-4ce94fbeb8cd
https://xtech.nikkei.com/it/article/lecture/20061115/253825/
https://shukapin.com/infographicIT/http
https://atmarkit.itmedia.co.jp/ait/articles/1508/31/news016.html
https://www.infraexpert.com/study/tcpip16.html