6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【図解でわかるWeb技術①】HTTPリクエスト/レスポンスの仕組みを完全理解する

6
Posted at

はじめに

「HTTPって何?」「リクエストとレスポンスって結局どういうこと?」

Webアプリ開発をしていると毎日のように登場する HTTP ですが、なんとなくの理解で使っていませんか?

この記事では、HTTPの仕組みを 図解付き で基礎から丁寧に解説します。読み終わるころには、ブラウザで「Enter」を押してからページが表示されるまでに 裏側で何が起きているか を説明できるようになります。

この記事は 「図解でわかるWeb技術の仕組み」シリーズ の第1回です。
Web開発で必須の基礎知識を、1テーマ1記事で図解していきます。


1. HTTPとは

一言でいうと

HTTP(HyperText Transfer Protocol) とは、クライアント(ブラウザ)とサーバーが データをやり取りするためのルール(プロトコル) です。

もう少し具体的にいうと

  • ブラウザで URL を入力してページを表示する
  • アプリから API を呼び出してデータを取得する
  • フォームに入力した内容を送信する

これらは すべて HTTP通信 で行われています。


2. HTTP通信の全体像

まず、HTTP通信の大きな流れを押さえましょう。

01_http_request_response_flow.png

たったこれだけです。 HTTP通信は、以下の2ステップで成り立っています。

ステップ 方向 内容
① リクエスト クライアント → サーバー 「このデータをください」と依頼する
② レスポンス サーバー → クライアント 「はい、どうぞ」とデータを返す

ポイントは 「必ずクライアントから始まる」 ということ。サーバーが勝手にデータを送ってくることはありません(WebSocket等を除く)。


3. HTTPリクエストの構造

クライアントからサーバーに送る「お願い」の中身を見てみましょう。

01_http_request_structure.png

HTTPリクエストは 4つのパーツ で構成されています。

① リクエスト行(Request Line)

GET /api/users HTTP/1.1

リクエストの 一番重要な1行 です。3つの情報が含まれます。

要素 例 意味
メソッド GET 何をしたいか(取得・作成・更新・削除)
パス /api/users どのリソースに対して
バージョン HTTP/1.1 HTTPのバージョン

② ヘッダー(Headers)

Host: example.com
Accept: application/json
Authorization: Bearer token123

リクエストの メタ情報(付加情報) です。「どのサーバー宛か」「どんな形式で返してほしいか」「認証情報」などを伝えます。

よく使うヘッダーをまとめます。

ヘッダー 用途 例
Host 送信先のサーバー名 example.com
Accept 受け取りたいデータ形式 application/json
Content-Type 送信するデータ形式 application/json
Authorization 認証情報 Bearer xxxxx
User-Agent クライアントの情報 Mozilla/5.0 ...

③ 空行

ヘッダーとボディの 区切り です。「ここからがボディだよ」という合図になります。

④ ボディ(Body)

{ "name": "Taro", "age": 25 }

サーバーに送りたい データ本体 です。GETリクエストでは通常ボディは空で、POST / PUT で使います。


4. HTTPレスポンスの構造

サーバーからクライアントに返す「回答」の中身です。

01_http_response_structure.png

構造はリクエストとよく似ていますが、1行目がステータス行に変わります。

① ステータス行(Status Line)

HTTP/1.1 200 OK
要素 例 意味
バージョン HTTP/1.1 HTTPのバージョン
ステータスコード 200 処理結果を表す数字
理由フレーズ OK ステータスコードの説明

② ヘッダー

Content-Type: application/json
Content-Length: 85

レスポンスのメタ情報です。「返すデータの形式」「データサイズ」「キャッシュの制御」などを伝えます。

③ 空行 + ④ ボディ

リクエストと同じく、空行の後にデータ本体が続きます。


5. HTTPメソッド ― 「何をしたいか」を伝える

HTTPメソッドは 「サーバーに何をしてほしいか」を伝える動詞 です。

01_http_methods.png

CRUD操作との対応

データ操作の基本である CRUD と HTTPメソッドは、以下のように対応しています。

CRUD HTTPメソッド SQL に例えると
Create(作成) POST INSERT
Read(読み取り) GET SELECT
Update(更新) PUT / PATCH UPDATE
Delete(削除) DELETE DELETE

PUTとPATCHの違い

  • PUT: リソース全体を置き換える(全フィールドを送る)
  • PATCH: リソースの一部だけを更新する(変更するフィールドだけ送る)

6. ステータスコード ― 「結果」を3桁で伝える

ステータスコードは 処理結果を3桁の数字で表現 したものです。先頭の数字でカテゴリが決まります。

01_http_status_codes.png

実務でよく遭遇するステータスコード

200 OK              → 正常に処理できた
201 Created         → リソースの作成に成功した
204 No Content      → 成功したが返すデータはない(DELETE等)

301 Moved Permanently → URLが恒久的に変わった
302 Found            → URLが一時的に変わっている
304 Not Modified     → キャッシュを使ってOK

400 Bad Request      → リクエストの形式がおかしい
401 Unauthorized     → 認証が必要(ログインしていない)
403 Forbidden        → 認証済みだがアクセス権がない
404 Not Found        → リソースが見つからない

500 Internal Server Error → サーバー内部で予期しないエラー
502 Bad Gateway          → 中間サーバーが不正な応答を受けた
503 Service Unavailable  → サーバーが一時的に利用できない

401 と 403 の違い(よく混同されるポイント)

  • 401: 「あなた誰?」 → ログインしていない、トークンが無効
  • 403: 「あなたは知ってるけどダメ」 → ログイン済みだが権限が足りない

7. 実際のHTTP通信を見てみよう

ブラウザの開発者ツールで確認

実際のHTTP通信は、ブラウザの 開発者ツール(DevTools) で簡単に確認できます。

手順:

  1. ブラウザで任意のページを開く
  2. F12(または Cmd + Option + I)で DevTools を開く
  3. Network タブを選択
  4. ページをリロード(Cmd + R)

一覧に表示される各行が 1回のHTTP通信 です。クリックすると、リクエスト/レスポンスのヘッダーやボディを確認できます。

curlコマンドで確認

ターミナルから直接HTTPリクエストを送ることもできます。

# GETリクエスト(ヘッダーも表示)
curl -v https://httpbin.org/get

# POSTリクエスト(JSONデータを送信)
curl -X POST https://httpbin.org/post \
  -H "Content-Type: application/json" \
  -d '{"name": "Taro", "age": 25}'

-v オプションをつけると、リクエストとレスポンスの ヘッダーがすべて表示 されるので、この記事で学んだ構造をそのまま確認できます。


8. まとめ

この記事で学んだポイントを整理します。

項目 ポイント
HTTPとは クライアントとサーバーがデータをやり取りするルール
通信の流れ 必ず「リクエスト → レスポンス」の順。クライアントから始まる
リクエストの構造 リクエスト行 + ヘッダー + 空行 + ボディ
レスポンスの構造 ステータス行 + ヘッダー + 空行 + ボディ
HTTPメソッド GET(取得)/ POST(作成)/ PUT(更新)/ DELETE(削除)
ステータスコード 2xx(成功)/ 3xx(リダイレクト)/ 4xx(クライアントエラー)/ 5xx(サーバーエラー)

次回予告

第2回では 「Cookie・Session・JWT の違い」 を図解で解説します。HTTP通信のたびに「あなたは誰?」と毎回聞かれるのを防ぐ仕組み — ステートレスなHTTPに"状態"を持たせる方法 を学びます。

シリーズ目次

# テーマ
1 HTTPリクエスト/レスポンスの仕組み(この記事)
2 Cookie・Session・JWT の違い
3 OAuth 2.0 の仕組み
4 DNS解決の流れ
5 HTTPS・TLS通信の仕組み
6 CDN の仕組みと役割
7 WebSocket ― 双方向リアルタイム通信
8 キャッシュ戦略(ブラウザ・サーバー・CDN)
9 CORS ― クロスオリジンの壁を理解する
10 REST API 設計の基本原則

「この記事が役に立った」と思ったら、LGTM とストックをお願いします。

@kotaro_ai_lab
AI活用や開発効率化について発信しています。フォローお気軽にどうぞ!

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?