HTTPとは?リクエストとレスポンスの仕組みを解説
HTTPは「HyperText Transfer Protocol」の略で、WebブラウザとWebサーバーの間でデータをやり取りするためのルール(プロトコル)です。Webページの閲覧やAPIの呼び出しなど、インターネット上のほぼすべての通信はHTTPを土台としています。この記事では、HTTPの基本的な仕組みを解説します。
HTTPの基本的な仕組み
HTTPは「リクエスト(要求)」と「レスポンス(応答)」の組み合わせで成り立っています。ブラウザがサーバーに「このページをください」とリクエストを送り、サーバーが「はい、どうぞ」とレスポンスを返す、というやり取りです。
身近な例で理解する
HTTPの通信は、レストランでの注文に似ています。
- お客さん(ブラウザ)がメニューを見て「カレーをください」と注文する → リクエスト
- 店員(サーバー)が厨房に伝え、料理を持ってくる → レスポンス
- 「売り切れです」と断られることもある → エラーレスポンス
リクエストとレスポンスの流れ
具体的には、次のような流れでやり取りが行われます。
- ブラウザのアドレスバーにURLを入力する
- ブラウザがサーバーにHTTPリクエストを送る
- サーバーがリクエストを処理する
- サーバーがHTTPレスポンスを返す
- ブラウザがレスポンスの内容(HTML、画像など)を画面に表示する
この一連のやり取りは通常、数百ミリ秒以内に完了します。
HTTPリクエストの構成
HTTPリクエストは、いくつかの要素で構成されています。ここでは実際のリクエストを見ながら理解しましょう。
リクエストの例
ブラウザが https://example.com/users にアクセスすると、おおよそ次のようなリクエストが送られます。
GET /users HTTP/1.1
Host: example.com
Accept: text/html
User-Agent: Mozilla/5.0 ...
1行目を「リクエストライン」と呼び、メソッド(GET)、パス(/users)、HTTPバージョン(HTTP/1.1)の3つから成ります。2行目以降は「ヘッダー」で、リクエストの付加情報を伝えます。
リクエストヘッダーの役割
ヘッダーには、サーバーに対して「自分はどんなデータを受け取れるか」「どんなブラウザを使っているか」などの情報を伝える役割があります。
Host: アクセス先のドメイン名Accept: 受け取りたいデータの形式User-Agent: ブラウザやOSの情報Authorization: 認証に必要なトークンなどContent-Type: 送信するデータの形式
HTTPメソッド
HTTPメソッドは「どんな操作をしたいか」をサーバーに伝えるものです。よく使われるメソッドは4つあります。
GET: データの取得
最も基本的なメソッドです。サーバーからデータを取得するときに使います。ブラウザでWebページを開くときは、内部的にGETリクエストが送られています。
// JavaScriptでGETリクエスト
const response = await fetch("https://api.example.com/users");
const users = await response.json();
POST: データの送信・作成
新しいデータをサーバーに送信して作成するときに使います。会員登録フォームの送信やブログ記事の投稿などが典型的な例です。
// JavaScriptでPOSTリクエスト
const response = await fetch("https://api.example.com/users", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ name: "田中太郎", email: "[email protected]" })
});
PUT / PATCH: データの更新
既存のデータを更新するときに使います。PUTはデータ全体を置き換え、PATCHは一部だけを更新します。
DELETE: データの削除
データを削除するときに使います。
await fetch("https://api.example.com/users/1", {
method: "DELETE"
});
メソッドの使い分け
これらのメソッドは、データの操作(CRUD)に対応しています。
- Create(作成)→ POST
- Read(取得)→ GET
- Update(更新)→ PUT / PATCH
- Delete(削除)→ DELETE
HTTPレスポンスの構成
サーバーが返すレスポンスにも、決まった構成があります。
レスポンスの例
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 85
{"name": "田中太郎", "age": 25}
1行目は「ステータスライン」で、HTTPバージョン、ステータスコード(200)、理由フレーズ(OK)が含まれます。ヘッダーの後に空行があり、その下がレスポンスボディ(実際のデータ)です。
レスポンスヘッダーの役割
サーバーからのレスポンスにもヘッダーが付いています。
Content-Type: 返すデータの形式(text/html、application/jsonなど)Content-Length: データのサイズ(バイト数)Set-Cookie: ブラウザに保存させたいCookieの情報Cache-Control: キャッシュの制御
ステータスコード
ステータスコードは3桁の数字で、リクエストの処理結果を示します。先頭の数字でカテゴリが分かれています。
2xx: 成功
リクエストが正常に処理されたことを示します。
200 OK: リクエスト成功201 Created: 新しいリソースが作成された204 No Content: 成功したが返すデータはない
3xx: リダイレクト
別のURLに転送されることを示します。
301 Moved Permanently: 恒久的にURLが変更された302 Found: 一時的に別のURLへ転送304 Not Modified: キャッシュを使ってよい(変更なし)
4xx: クライアントエラー
リクエスト側に問題があることを示します。
400 Bad Request: リクエストの形式が不正401 Unauthorized: 認証が必要403 Forbidden: アクセスが禁止されている404 Not Found: リソースが見つからない
「404エラー」は日常的にも見かけることがあるのではないでしょうか。存在しないURLにアクセスしたときに表示されます。
5xx: サーバーエラー
サーバー側に問題があることを示します。
500 Internal Server Error: サーバー内部でエラーが発生502 Bad Gateway: 中継サーバーが不正な応答を受け取った503 Service Unavailable: サーバーが一時的に利用不可
HTTPSとセキュリティ
現在のWebでは、HTTPではなくHTTPSが標準です。URLが https:// で始まるサイトは、HTTPSで通信しています。
HTTPとHTTPSの違い
HTTPSはHTTPにTLS(Transport Layer Security)という暗号化の仕組みを加えたものです。通信内容が暗号化されるため、第三者に盗み見られるリスクが大幅に減ります。
- HTTP: 通信内容が平文(暗号化なし)
- HTTPS: 通信内容が暗号化されている
なぜHTTPSが重要なのか
HTTPSが必要な理由は主に次の3つです。
- パスワードやクレジットカード情報の盗聴を防ぐ
- 通信内容の改ざんを防ぐ
- 接続先のサーバーが本物であることを証明する
現在では、ほとんどのブラウザがHTTP接続のサイトに対して警告を表示するようになっています。
開発者ツールでHTTPを観察する
実際のHTTP通信は、ブラウザの開発者ツールで確認できます。
通信内容の確認方法
- ブラウザで任意のWebページを開く
- 開発者ツールを開く(F12キーまたは右クリック→「検証」)
- 「Network」タブを選択する
- ページを再読み込みする
一覧に表示される各行が1つのHTTPリクエスト/レスポンスのペアです。クリックすると、ヘッダーやボディの詳細を確認できます。
Pythonでリクエストを試す
Pythonの requests ライブラリを使うと、プログラムからHTTPリクエストを送信できます。
import requests
# GETリクエスト
response = requests.get("https://httpbin.org/get")
print(response.status_code) # 200
print(response.json()) # レスポンスの中身
# POSTリクエスト
response = requests.post(
"https://httpbin.org/post",
json={"name": "田中太郎"}
)
print(response.status_code) # 200
httpbin.org はHTTPリクエストのテストに使える無料サービスです。送ったリクエストの内容をそのまま返してくれるため、学習に便利です。
まとめ
この記事では、HTTPの基本を解説しました。
- HTTPはブラウザとサーバー間の通信ルール(プロトコル)
- リクエスト(要求)とレスポンス(応答)の組み合わせで成り立つ
- HTTPメソッド(GET、POST、PUT、DELETE)で操作の種類を指定する
- ステータスコード(200、404、500など)で処理結果を示す
- HTTPSは暗号化が加わった安全な通信方式
HTTPの仕組みを理解しておくと、API開発やWebアプリケーションの構築がスムーズになります。まずはブラウザの開発者ツールで、ふだん閲覧しているサイトのHTTP通信を観察してみてください。