はじめに
アプリケーションの開発では当たり前のように利用している HTTP (HyperText Transfer Protocol) ですが、改めて通信の流れや仕組みを整理してみました。
改訂履歴
- 2026/07/22 : 初版公開。
本文
1. 概要
HTTP (HyperText Transfer Protocol) とは、Web ブラウザと Web サーバーがデータをやり取りするための通信プロトコルです。2026 年現在では HTTP/2 および HTTP/3 が広く利用されており、HTTP/1.1 も互換性のため引き続き利用されています。
| バージョン | 公開年 | 特徴 |
|---|---|---|
| HTTP/1.1 | 1997 年 | 長年利用されている標準的な仕様。 |
| HTTP/2 | 2015 年 | 多重化により通信を高速化。 |
| HTTP/3 | 2022 年 | UDP ベースの QUIC を採用し、さらに高速・高信頼化。 |
HTTP 自体はステートレス(状態を保持しない)なプロトコルであり、各リクエストは独立して処理されます。そのため、ログイン状態などを維持するためには Cookie やセッション、JWT などの仕組みが利用されます。
2. HTTP メッセージの構造
2-1. HTTP リクエスト
HTTP リクエストは、クライアントからサーバーへ送信される要求です。HTTP リクエストは、リクエストライン・HTTP ヘッダー・リクエストボディ の 3 つで構成されます。
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Chrome
Accept: text/html
1 行目はリクエストラインと呼ばれ、以下の情報で構成されます。
| 項目名 | 項目内容 |
|---|---|
| リクエストメソッド | GET・POST・PUT・PATCH・DELETE など |
| リクエストターゲット | /index.html |
| HTTP バージョン | HTTP/1.1 |
補足
HTTP/1.1 以前はテキスト形式のため、直接人間でも読むことができました。HTTP/2 および HTTP/3 はバイナリフレームとして送信されるため、人間には読めません。
しかし原理は変わらないため、以降も HTTP/1.1 でサンプルを書いていきます。
2 行目以降は HTTP ヘッダーです。ヘッダーには接続先やデータ形式、認証情報など、通信に必要となる様々な追加情報が含まれます。詳細は後の章で説明します。
リクエストメソッドが POST や PUT などの場合、さらにこの後ろにリクエストボディとして、送信するデータを付与します。例えば、ユーザー情報を登録する場合は、以下のような HTTP リクエストになります。
POST /users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Taro",
"age": 20
}
上記の例では HTTP ヘッダーの Content-Type で、送信するデータ形式が JSON であることを示し、その後ろのリクエストボディに登録するデータを記述しています。
2-2. HTTP レスポンス
HTTP レスポンスは、サーバーからクライアントへ返却される処理結果です。HTTP レスポンスは、ステータスライン・HTTP ヘッダー・レスポンスボディ の 3 つで構成されます。
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 85
<!DOCTYPE html>
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
1 行目は ステータスライン と呼ばれ、以下の情報で構成されます。
| 項目名 | 項目内容 |
|---|---|
| HTTP バージョン | HTTP/1.1 |
| ステータスコード | 200・201・301・400・401・403・404・500 など |
| 理由句 | OK・404 Not Found など |
2 行目以降は HTTP ヘッダーです。ヘッダーには返却するデータ形式やデータサイズ、キャッシュ制御など、レスポンスに関する様々な追加情報が含まれます。詳細は後の章で説明します。
空行の後ろにはレスポンスボディが続き、HTML や JSON、画像データなど、クライアントへ返却するデータが格納されます。上記の例では HTTP ヘッダーの Content-Type で返却するデータ形式が HTML であることを示し、レスポンスボディには Web ページの内容 (Hello, World!) が格納されています。
3. HTTPS
HTTPS (HyperText Transfer Protocol Secure) とは、HTTP に TLS (Transport Layer Security) による暗号化機能を追加した通信方式です。
HTTP は通信内容がそのまま送受信されるため、通信経路上で内容を盗み見られたり、改ざんされたりする可能性があります。一方、HTTPS では TLS によって通信内容が暗号化されるため、安全にデータを送受信できます。
HTTPS には主に次のような特徴があります。
- 通信内容を暗号化し、盗聴を防止します。
- 通信内容の改ざんを検知できます。
- サーバー証明書により通信相手が正しいサーバーであることを確認できます。
2026 年現在では、ほとんどの Web サイトや Web API で HTTPS が利用されています。
4. HTTP の関連情報
4-1. HTTP ヘッダー
HTTP ヘッダーには通信に必要となる様々な追加情報が含まれています。よく見かけるヘッダーには次のようなものがあります。
| ヘッダー | 設定例 | 説明 |
|---|---|---|
| Host | example.com |
接続先ホスト名 |
| Content-Type | application/json |
データ形式 |
| Content-Length | 1234 |
データサイズ (Byte) |
| Authorization | Bearer eyJ... |
認証情報 |
| Cookie | sessionid=abc123 |
Cookie 情報 |
| Set-Cookie |
sessionid=abc123; HttpOnly; Secure; SameSite=Lax
|
Cookie の設定 HttpOnly : JavaScript から Cookie の参照禁止 ※ XSS 対策 Secure : HTTPS でのみ Cookie 送信可能 ※ 盗聴対策 SameSite=Lax : 他サイトからの Cookie 送信制限 ※ CSRF 対策
|
| Cache-Control | max-age=3600 |
キャッシュ制御 |
| Accept | application/json |
受け取れるデータ形式 |
| User-Agent | Mozilla/5.0 ... |
ブラウザなどクライアント情報 |
| Content-Security-Policy | default-src 'self' |
読込元の制限 ※ XSS 対策 |
| Strict-Transport-Security | max-age=31536000 |
HTTPS の強制 (HSTS) |
| X-Content-Type-Options | nosniff |
MIME タイプの推測防止 ※ XSS 対策 |
4-2. HTTP ステータスコード
HTTP ステータスコードは、HTTP レスポンスで返却される処理結果を表す 3 桁の数値です。ステータスコードを見ることで、リクエストが正常に処理されたのか、エラーが発生したのかを判断できます。
ステータスコードは先頭の数字によって次のように分類されます。
| 分類 | 概要 |
|---|---|
| 1xx | 情報 |
| 2xx | 成功 |
| 3xx | リダイレクト |
| 4xx | クライアントエラー |
| 5xx | サーバーエラー |
代表的なステータスコードは以下のとおりです。
| ステータスコード | 説明 |
|---|---|
| 200 OK | リクエストが正常に処理された。 |
| 201 Created | リソースの作成に成功した。 |
| 301 Moved Permanently | リソースが恒久的に移動した。 |
| 400 Bad Request | リクエストの内容が不正。 |
| 401 Unauthorized | 認証に失敗。 |
| 403 Forbidden | アクセス権限がない。 |
| 404 Not Found | リソースが存在しない。 |
| 500 Internal Server Error | サーバー内部でエラーが発生した。 |
5. 参考
おわりに
気付きがあれば、追記します。