メインコンテンツにスキップ

🌐 HTTPとは?

📖 定義

HTTP (HyperText Transfer Protocol) は、Webでデータをやり取りするためのプロトコルです。クライアント(ブラウザ)とサーバー間の通信ルールを定義し、Webの基盤となる技術です。

🎯 比喩で理解する

郵便システム

HTTPを郵便システムに例えると:

手紙を送る (HTTP Request)
├─ 送り主: クライアント (ブラウザ)
├─ 宛先: サーバー
├─ 手紙の内容: リクエストデータ
└─ 郵便規則: HTTPプロトコル

返事を受け取る (HTTP Response)
├─ 送り主: サーバー
├─ 宛先: クライアント
├─ 返事の内容: レスポンスデータ
└─ 状態: 成功/失敗

レストランの注文

お客 (クライアント)
↓ メニュー確認 (GET リクエスト)
ウェイター (HTTP)
↓ 注文を伝達
キッチン (サーバー)
↓ 料理を準備
ウェイター (HTTP)
↓ 料理を提供 (レスポンス)
お客 (クライアント)

💡 HTTPの核心概念

リクエストとレスポンス

クライアント ────リクエスト(Request)───→ サーバー
←───レスポンス(Response)────

リクエスト (Request)

  • クライアントがサーバーに何を求めているかを伝える
  • メソッド、URL、ヘッダー、ボディで構成

レスポンス (Response)

  • サーバーがクライアントのリクエストに対する結果を伝える
  • ステータスコード、ヘッダー、ボディで構成

HTTPの特徴

1. ステートレス (Stateless)
├─ 各リクエストは独立
├─ 以前のリクエストを記憶しない
└─ クッキー/セッションで状態管理

2. クライアント-サーバーアーキテクチャ
├─ 役割分担
├─ クライアント: UI/UX
└─ サーバー: データ/ビジネスロジック

3. 非持続接続 (Connectionless)
├─ リクエスト-レスポンス後に接続終了
├─ サーバーリソース節約
└─ Keep-Aliveで改善可能

📚 シリーズ文書

このシリーズはHTTPの核心概念を段階的に扱います:

1. HTTPメソッド

GET, POST, PUT, DELETEなど

  • HTTPメソッドの種類と用途
  • RESTful API設計
  • 等冪性と安全性
  • 実践的な例

2. HTTPステータスコード

200, 404, 500など

  • 2xx (成功), 4xx (クライアントエラー), 5xx (サーバーエラー)
  • 各ステータスコードの意味
  • 実務でよく見るコード
  • エラー処理方法

3. HTTPヘッダー

リクエスト/レスポンスヘッダー

  • ヘッダーの役割と種類
  • Content-Type, Authorization など
  • CORS関連ヘッダー
  • キャッシングヘッダー

4. クッキーとセッション

状態管理

  • HTTPのステートレス性の克服
  • クッキーの動作原理
  • セッション vs トークン
  • セキュリティ上の考慮事項

🔍 HTTPの進化

HTTP/0.9 (1991)
├─ GETメソッドのみサポート
└─ HTMLのみ転送

HTTP/1.0 (1996)
├─ ヘッダーの概念導入
├─ POST, HEAD追加
└─ ステータスコード導入

HTTP/1.1 (1997)
├─ Keep-Aliveがデフォルト
├─ パイプライニング
├─ PUT, DELETEなど追加
└─ ホストヘッダー必須

HTTP/2 (2015)
├─ バイナリプロトコル
├─ マルチプレクシング
├─ ヘッダー圧縮
└─ サーバープッシュ

HTTP/3 (2022)
├─ QUIC ベース (UDP)
├─ より高速な接続
└─ パケット損失に強い

💡 実際の例

Webページのロード

1. ブラウザでURLを入力
https://example.com

2. DNS検索
example.com → 93.184.216.34

3. HTTPリクエスト生成
GET / HTTP/1.1
Host: example.com
User-Agent: Chrome/120.0

4. サーバーレスポンス
HTTP/1.1 200 OK
Content-Type: text/html

<html>...</html>

5. ブラウザレンダリング
画面にWebページ表示

API呼び出し例

# GET リクエスト - データ取得
curl https://api.example.com/users

# POST リクエスト - データ作成
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "田中太郎"}'

# PUT リクエスト - データ更新
curl -X PUT https://api.example.com/users/1 \
-H "Content-Type: application/json" \
-d '{"name": "山田花子"}'

# DELETE リクエスト - データ削除
curl -X DELETE https://api.example.com/users/1

🤔 よくある質問

Q1. HTTPとHTTPSの違いは?

答:

HTTP (Port 80)
├─ プレーンテキスト通信
├─ セキュリティ脆弱
└─ http://

HTTPS (Port 443)
├─ SSL/TLS 暗号化
├─ データ保護
├─ 証明書が必要
└─ https://

主な違い:
- HTTPSはデータを暗号化して転送
- 中間者攻撃を防止
- 検索エンジン最適化(SEO)に有利
- モダンWebの標準

Q2. なぜHTTPはステートレスなのか?

答:

ステートレスの理由:
1. 拡張性
├─ サーバーが状態を保存しない
├─ 複数のサーバーに分散可能
└─ ロードバランシングが容易

2. 単純性
├─ 各リクエストが独立
├─ サーバー実装が簡単
└─ 障害復旧が容易

3. リソース節約
├─ メモリ使用を最小化
└─ 同時処理が効率的

状態管理方法:
- クッキー
- セッション
- トークン (JWT)
- ローカルストレージ

Q3. REST APIとHTTPの関係は?

答:

REST (Representational State Transfer)
├─ HTTPを基盤としたアーキテクチャスタイル
├─ HTTPメソッドをCRUDにマッピング
└─ リソース中心の設計

HTTPメソッドとCRUD:
GET → Read (取得)
POST → Create (作成)
PUT → Update (全体更新)
PATCH → Update (部分更新)
DELETE → Delete (削除)

RESTful APIの例:
GET /users - ユーザーリスト取得
GET /users/1 - 特定ユーザー取得
POST /users - 新規ユーザー作成
PUT /users/1 - ユーザー情報更新
DELETE /users/1 - ユーザー削除

🎓 学習順序のおすすめ

1段階: 基本概念
├─ HTTPとは? (現在の文書)
├─ リクエスト/レスポンス構造
└─ クライアント-サーバーモデル

2段階: HTTPメソッド
├─ GET, POST, PUT, DELETE
├─ 各メソッドの用途
└─ RESTful設計

3段階: ステータスコード
├─ 2xx, 4xx, 5xxの意味
├─ よく見るコード
└─ エラー処理

4段階: ヘッダー
├─ リクエスト/レスポンスヘッダー
├─ Content-Type
└─ 認証ヘッダー

5段階: 状態管理
├─ クッキーとセッション
├─ トークンベース認証
└─ セキュリティ上の考慮事項

🔗 関連文書

🎬 おわりに

HTTPはWeb開発の最も基本的なプロトコルです。このシリーズを通じてHTTPの核心概念を少しずつ学んでいきましょう!

次のステップ: HTTPメソッドを読んで、GET、POSTなどのメソッドを詳しく学びましょう。