HTTPリクエスト/レスポンスを理解する 📡
Webサイトを訪問したり、アプリを使用するとき、コンピュータとサーバーはどのように会話するのでしょうか?それはHTTPというルールを使っています!初心者でも簡単に理解できるように説明します。
HTTPを日常生活に例えると?
HTTPをレストランの注文に例えてみましょう。
レストランの話 🍽️
1. 客: "パスタをください!" (リクエスト)
2. ウェイター: キッチンに伝える
3. キッチン: パスタを調理
4. ウェイター: "パスタができました!" (レスポンス)
5. 客: パスタを受け取る
HTTPも同じです:
1. ブラウザ: "index.htmlをください!" (HTTPリクエスト)
2. サーバー: ファイルを探す
3. サーバー: "ここにあります!" (HTTPレスポンス)
4. ブラウザ: ページを表示
HTTPの定義
HTTP (HyperText Transfer Protocol)
- Webブラウザとサーバーがデータをやり取りするルール
- プロトコル = 約束されたルール
- Webの基礎となる通信方法
HTTPリクエスト/レスポンスの流れ
┌─────────┐ ┌─────────┐
│ │ ── HTTPリクエスト (Request) →│ │
│ブラウザ │ │ サーバー│
│ │ ← HTTPレスポンス (Response)──│ │
└─────────┘ └─────────┘
全体の流れ
- リクエスト (Request): ブラウザがサーバーに何かを要求
- 処理 (Processing): サーバーがリクエストを処理
- レスポンス (Response): サーバーが結果をブラウザに送信
- レンダリング (Rendering): ブラウザが画面に表示
HTTPメソッド (リクエスト方法)
サーバーに**「どのように」**するか伝える動詞です。
1. GET 📖
「取得する」 - データを要求する
GET /products/123
例:
- Webページを見る
- 検索結果を取得する
- 商品リストを見る
特徴:
- データを取得するだけ
- サーバーのデータを変更しない
- URLにデータが表示される
- ブックマーク可能
実際の使用:
https://google.com/search?q=javascript
└───────┬──────┘
GETパラメータ
2. POST 📝
「作成する」 - 新しいデータをサーバーに送信
POST /users
{
"name": "田中太郎",
"email": "tanaka@example.com"
}
例:
- 会員登録
- 投稿作成
- 注文する
特徴:
- サーバーにデータを作成
- 本文(Body)にデータを含む
- URL にデータが表示されない
- ブックマーク不可
3. PUT ✏️
「更新する」 - 既存データを丸ごと置き換える
PUT /users/123
{
"name": "佐藤花子",
"email": "sato@example.com"
}
例:
- プロフィール全体を更新
- 投稿全体を更新
4. PATCH 🔧
「一部更新する」 - 既存データの一部だけを変更
PATCH /users/123
{
"email": "newemail@example.com"
}
例:
- メールアドレスのみ変更
- パスワードのみ変更
5. DELETE 🗑️
「削除する」 - データを削除
DELETE /users/123
例:
- アカウント削除
- 投稿削除
- 商品削除
HTTPメソッド比較表
| メソッド | 用途 | データ変更 | データの場所 |
|---|---|---|---|
| GET | 取 得 | ❌ | URL |
| POST | 作成 | ✅ | Body |
| PUT | 全体更新 | ✅ | Body |
| PATCH | 一部更新 | ✅ | Body |
| DELETE | 削除 | ✅ | URL |
HTTPリクエストの構造
GET /api/users?page=1 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer token123
{本文データ (POST, PUT, PATCHの場合)}
構成要素
-
リクエストライン:
GET /api/users HTTP/1.1- メソッド: GET
- パス: /api/users
- HTTPバージョン: 1.1
-
ヘッダー (Headers): 追加情報
Host: どのサーバー?
User-Agent: どのブラウザ?
Accept: どの形式を受け取る?
Authorization: 認証情報 -
本文 (Body): 実際のデータ (POST, PUT, PATCH)
HTTPレスポンスの構造
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1234
{
"id": 1,
"name": "田中太郎"
}
構成要素
-
ステータスライン:
HTTP/1.1 200 OK- HTTPバージョン: 1.1
- ステータスコード: 200
- ステータスメッセージ: OK
-
ヘッダー (Headers): レスポンス情報
Content-Type: どの形式?
Content-Length: データサイズ -
本文 (Body): 実際のデータ
HTTPステータスコード 🚦
サーバーが**「どうなった」**を教えてくれる数字です。
2xx - 成功 ✅
| コード | 意味 | 説明 |
|---|---|---|
| 200 | OK | 成功! |
| 201 | Created | 新しく作成されました |
| 204 | No Content | 成功したが送る内容がありません |
3xx - リダイレクション 🔄
| コード | 意味 | 説明 |
|---|---|---|
| 301 | Moved Permanently | 永久に移動しました |
| 302 | Found | 一時的に別の場所にあります |
| 304 | Not Modified | 変更されていないのでキャッシュを使用してください |
4xx - クライアントエラー ❌
| コード | 意味 | 説明 |
|---|---|---|
| 400 | Bad Request | リクエストが間違っています |
| 401 | Unauthorized | ログインが必要です |
| 403 | Forbidden | 権限がありません |
| 404 | Not Found | 見つかりません |
| 429 | Too Many Requests | リクエストが多すぎます |
5xx - サーバーエラー 🔥
| コード | 意味 | 説明 |
|---|---|---|
| 500 | Internal Server Error | サーバーに問題が発生しました |
| 502 | Bad Gateway | ゲートウェイエラー |
| 503 | Service Unavailable | サービスが利用できません |
ヒント
HTTP Status Guideですべてのステータスコードを確認できます!
実践例
例1: 検索 🔍
リクエスト:
GET https://google.com/search?q=javascript
レスポンス:
HTTP/1.1 200 OK
Content-Type: text/html
<html>
<body>検索結果...</body>
</html>
例2: ログイン 🔐
リクエスト:
POST https://api.example.com/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "password123"
}
レスポンス (成功):
HTTP/1.1 200 OK
Content-Type: application/json
{
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": 1,
"name": "田中太郎"
}
}
レスポンス (失敗):
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"error": "Invalid email or password"
}
例3: 投稿作成 ✍️
リクエスト:
POST https://api.example.com/posts
Content-Type: application/json
Authorization: Bearer token123
{
"title": "最初の投稿",
"content": "こんにちは!"
}
レスポンス:
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 42,
"title": "最初の投稿",
"content": "こんにちは!",
"createdAt": "2025-01-23T10:30:00Z"
}
例4: プロフィール修正 ✏️
リクエスト:
PATCH https://api.example.com/users/me
Content-Type: application/json
Authorization: Bearer token123
{
"email": "newemail@example.com"
}
レスポンス:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"name": "田中太郎",
"email": "newemail@example.com"
}
例5: 投稿削除 🗑️
リクエスト:
DELETE https://api.example.com/posts/42
Authorization: Bearer token123
レスポンス:
HTTP/1.1 204 No Content