リクエスト・レスポンス

HTTPリクエストとHTTPレスポンス

「クライアント」(利用者が操作する端末やブラウザなど)と、情報を提供する「サーバー」という2つの役割の間では、決まった形式のやり取りが行われています。クライアントがサーバーに送る依頼が「HTTPリクエスト」、それに対してサーバーが返す応答が「HTTPレスポンス」です。必ずHTTPリクエストが送信されて初めてHTTPレスポンスが返ってくる仕組みになっており、レスポンスだけが単独で送られてくることはありません。

クライアント
(PC・スマホ・タブレットなど)
HTTPリクエスト →
← HTTPレスポンス
サーバー

ぽち先生のヒント宅配便に「集荷をお願いします」と依頼して初めて、荷物を取りに来てもらえるのと同じだよ。こちらから頼む前に荷物が届くことは絶対にないよね。HTTPも同じで、必ずリクエストが先、レスポンスが後という順番は変わらないんだ。

HTTPリクエストを構成する3つの要素

HTTPリクエストは、次の3つの要素が横に並んでいるのではなく、上から下へ縦3段で並んだ、1つのまとまったメッセージです。

①リクエストライン「何を」「どこに」要求するかを示す1行目。メソッド・パス・HTTPバージョンで構成されます。
②リクエストヘッダーリクエスト送信者の情報+リクエストに関する細かい設定
③リクエストボディPOST時にユーザーが送信したパラメータの内容。GET時は空欄になります。

このあと、それぞれの要素を1つずつ詳しく見ていきましょう。

ぽち先生のヒント宅配便の伝票と荷物に例えられるよ。伝票の宛先欄が①リクエストライン、伝票の特記事項欄が②リクエストヘッダー、そして箱の中身が③リクエストボディなんだ。

HTTPリクエストライン

リクエストラインは、HTTPリクエストの1行目に書かれる、「何を」「どこに」要求するかを示す情報です。「メソッド」「パス(URL)」「HTTPのバージョン」という3つの要素で構成されています。

GETメソッド
/index.htmlパス(URL)
HTTP/1.1HTTPバージョン

この例なら「index.htmlというページを、GETメソッドで、HTTP/1.1というルールに従って取得してください」という意味になります。

ぽち先生のヒント宅配便の伝票の宛先欄と同じだよ。「誰に」「どんな配送方法で」届けてほしいかを、一番最初にはっきり書いておく部分なんだ。

メソッドとは

メソッドとは、サーバーに対して「何をしてほしいか」を伝える命令の種類です。数あるメソッドの中でも、普段のWeb閲覧で圧倒的によく使われるのが、情報を取得する「GET」と、データを送信する「POST」です。ほかにも、API開発などでは次のようなメソッドが使い分けられます。

PUT指定したデータ全体を置き換える
PATCHデータの一部だけを更新する
DELETEデータを削除する
HEADGETと同様だが、ボディを含まずヘッダーだけ取得する
OPTIONSサーバーが対応しているメソッドを確認する

この後は、特によく使われるGET・POSTがどんな場面で呼ばれるのか、詳しく見ていきましょう。

ぽち先生のヒント宅配業者への依頼にもいろいろな種類があるのと同じだよ。「集荷」「再配達」「追跡」のように、目的に応じた専用の頼み方が用意されているんだ。

HTTPリクエストヘッダー

リクエストヘッダーは、リクエストラインだけでは伝えきれない、追加の情報を伝える部分です。「名前: 値」という形式で、複数行にわたって書かれます。

Host接続先のドメイン名
User-Agent使用しているブラウザやOS、端末の情報
Referer直前にいたページのURL
Cookie保存されているCookie情報
Accept-Language対応してほしい言語

サーバーはこれらの情報をもとに、レスポンスの内容を調整することもあります。特にUser-Agentは「どんな端末・ブラウザから見られているか」、Refererは「どこから来たアクセスか」を知る手がかりになるため、アクセス解析やマーケティング分析でもよく使われる情報です。Cookieについては個別トピックで詳しく解説します。

ぽち先生のヒント宅配便の伝票の「差出人欄」+「特記事項欄」に例えられるよ。誰が送ったかという情報と、「割れ物注意」のような細かい指示を、荷物本体とは別に書き添える欄なんだ。

HTTPリクエストボディとは

リクエストボディは、サーバーに送信したいデータそのものが格納される部分です。GETのようにデータを送らないメソッドでは空になりますが、POSTのようにデータを伴うメソッドでは、ここにフォームの入力内容などが入ります。

フォームの
入力内容
リクエストボディに
格納
サーバーが
受け取る

ぽち先生のヒント宅配便の箱の中身そのものに似ているよ。伝票にどれだけ詳しく書いても、実際に運ぶものが箱にちゃんと入っていないと意味がないよね。

ユーザー側からページにアクセスした際は基本的にGETメソッドが呼ばれる

URLを直接入力する、リンクをクリックする、ブックマークから開く——こうした「ページを見に行く」操作は、基本的にすべて「GET」メソッドでリクエストが送られます。GETは、指定した場所にある情報を「そのまま見せてください」とお願いするための、閲覧向けのメソッドです。

URLを
直接入力
リンクを
クリック
ブックマーク
から開く
GETで
要求
サーバー
ページが
表示される

ぽち先生のヒント宅配便の窓口に行くと、何も言わなくても料金表や案内チラシを渡されるのに似ているよ。何か依頼をしなくても、置いてある情報がそのまま差し出されるよね。GETも同じで、情報を見せてもらうだけの操作なんだ。

POSTはWebページでPOSTアクションを指定した場合限定で呼ばれる

一方「POST」は、Webページ側で明示的に「ここではPOSTを使う」と指定されている場合に限って使われます。代表的なのは、フォームの送信ボタンを押したときです。HTMLの<form>タグにmethod="post"と指定されていると、その送信時にPOSTリクエストが送られます。指定がなければGETが使われるため、POSTは「ここぞ」というときに使われる特別なメソッド、と捉えるとわかりやすいでしょう。

このとき送信されるのは、ユーザーが実際に入力した値だけではありません。Web制作者があらかじめページに埋め込んでおいたhidden項目の値も一緒に、パラメーターとしてリクエストボディへ格納されて送られます。

フォームに
入力
送信ボタンを
クリック
POSTで
送信
入力値+hidden項目を
リクエストボディに格納
サーバーが
データを処理

ぽち先生のヒント宅配便の窓口で、配送伝票に必要事項を記入して荷物を渡すのに似ているよ。伝票に書き込んだ内容と荷物をまとめて渡して初めて、集荷してもらえるよね。POSTも同じで、入力した内容をまとめて渡して初めて、サーバーに処理してもらえるんだ。

パラメーターとは

パラメーターとは、リクエストに含めてサーバーに渡す「値」のことです。パラメーターはname=ぽち&email=pochi@example.comのように「キー=値」の形式で表され、複数ある場合は&でつなげます。

GETとPOSTでは、このパラメーターの置き場所が異なります。

GET
/searchパス
?区切り文字
keyword=犬パラメータ
(クエリ文字列)
POST
フォームに
入力
リクエストボディに
格納
URLには
表れない

GETはパラメーターがそのままURLの末尾に付け加えられるのに対し、POSTはリクエストボディの中に隠れているため、URLだけを見てもパラメーターの中身はわかりません。

ぽち先生のヒント宅配便の伝票に書き込む項目に似ているよ。「お届け先」「電話番号」のように、項目名と実際に書き込む内容がセットになっているんだ。GETはこの内容を伝票に直接書き込んで誰でも見える状態、POSTは箱の中に入れて外からは見えない状態、というイメージなんだ。

GET、POSTでパラメータを渡す場合のメリットとデメリット

メリット
🔗 GET URLだけで状態を共有・ブックマークできる キャッシュされやすく、サーバー負荷が軽い
📦 POST URLに出ないのである程度の機密性を保てる 大きなデータでも送信できる
デメリット
🔗 GET パラメータが他人から見えてしまう 送れるデータ量に制限がある
📦 POST URLだけでは同じ状態を再現できない キャッシュされにくく、サーバー負荷がかかりやすい

パスワードなど他人に見られたくない値はPOSTで送るのが基本です。検索条件のように「あとでURLだけ共有したい」情報はGETが向いています。

ぽち先生のヒントGETは「伝票に大きく書かれた宛先」、POSTは「箱に入れて封をした中身」に似ているよ。伝票の記載は誰でもすぐ見られて確認しやすいけど内容は丸見え。箱の中身は開けないと見えない分、ある程度の秘密を保てるんだ。

HTTPレスポンスを構成する3つの要素

ここからはHTTPレスポンス側を見ていきます。レスポンスも、リクエストと同じように、横並びではなく縦3段で構成された1つのまとまったメッセージです。

①ステータスライン結果を一言で表す1行目。HTTPバージョン・ステータスコード・説明文で構成されます。
②レスポンスヘッダーレスポンスボディの扱い方を伝える追加情報。複数行にわたって続きます。
③レスポンスボディ実際に返却されるデータ本体。HTMLやJSONなどが入ります。

ぽち先生のヒント荷物を受け取ったときの「受領書」に似ているよ。受け取りましたという一言(①ステータスライン)、受領に関する注意書き(②レスポンスヘッダー)、そして実際に届いた中身(③レスポンスボディ)、という組み合わせなんだ。

HTTPステータスライン

ステータスラインは、HTTPレスポンスの1行目に書かれる、リクエストの結果を表す情報です。「HTTPのバージョン」「ステータスコード」「説明文(リーズンフレーズ)」という3つの要素で構成されています。

HTTP/1.1HTTPバージョン
200ステータスコード
OK説明文
(リーズンフレーズ)

ステータスコードが何を意味するか(200番台・400番台・500番台など)は、プロトコル(HTTP)の個別トピックで詳しく解説しています。

ぽち先生のヒント宅配便の送付結果に似ているよ。追跡サイトで表示される「配送システムのバージョン」「配送結果を表す状況コード」「『配達完了』のようなひとことの説明」、この3つで「荷物がどうなったか」を短く伝えてくれるんだ。

HTTPレスポンスヘッダー

レスポンスヘッダーは、レスポンスボディをどう扱えばよいかをブラウザに伝える、追加の情報です。リクエストヘッダーと同じく「名前: 値」の形式で書かれます。

Content-Type返却するデータの種類(HTML・JSON・画像など)
Content-Lengthデータのサイズ
Set-Cookieブラウザに保存してほしいCookie
Cache-Controlキャッシュの扱い方

これらの情報をもとに、ブラウザは受け取ったデータを正しく解釈して表示できます。Cookie・キャッシュについては、それぞれの個別トピックで詳しく解説します。

ぽち先生のヒント宅配便の箱に貼られている「取り扱い注意」シールに似ているよ。中身(レスポンスボディ)をどう扱えばいいかという情報が、荷物とは別に貼り付けられているんだ。

HTTPレスポンスボディ

レスポンスボディは、サーバーが返す実際のデータそのものが格納される部分です。Webページであれば表示用のHTML、APIであればJSON形式のデータなどが、ここに入っています。

📄 HTML(Webページ) <html><body>...</html> ブラウザがそのまま画面に表示する
🧩 JSON(API) {"name": "ぽち", "age": 3} プログラムが値を読み取って処理する
🖼️ バイナリ(画像・PDFなど) 文字としては読めないデータの並び 画像や音声、PDFなどをそのままの形で送る

どの形式でデータが返ってきたかは、直前のスライドで見た「Content-Type」ヘッダーによってブラウザに伝えられます。

ぽち先生のヒント宅配便で実際に届く荷物そのものだとイメージしてみて。ステータスラインが「お届けに上がりました」という一言、レスポンスヘッダーが荷物に貼られた注意書き、そしてレスポンスボディが実際に届く荷物の中身そのものなんだ。

まとめ

HTTPリクエストは「リクエストライン」「リクエストヘッダー」「リクエストボディ」、HTTPレスポンスは「ステータスライン」「レスポンスヘッダー」「レスポンスボディ」という、それぞれ3つの要素で構成されています。

また、リクエストには「メソッド」という種類があり、代表的なGET・POSTはパラメータの渡し方や使いどころが異なります。それぞれの詳しい内容は、以下の個別トピックでさらに学べます。

関連トピック:

🏠 トップに戻る