この用語をシェア
HTTPとは
HTTP(HyperText Transfer Protocol)は、WebブラウザとWebサーバー間で情報をやり取りするためのプロトコルです。World Wide Web(WWW)の基盤となる技術であり、WebページやAPIの通信に使用されます。
1991年に初期バージョンが公開されて以来、HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3と進化を続けており、いずれも「クライアントがリクエストを送り、サーバーがレスポンスを返す」という基本的な通信モデルを踏襲しています。現在ではWebページの表示だけでなく、REST APIやWebhookなど、システム間連携の標準プロトコルとしても広く使われています。
主要な特徴
- ステートレス:各リクエストが独立しており、前のリクエストの状態を保持しません
- テキストベース:人間が読める形式でメッセージが構成されています
- リクエスト・レスポンス型:クライアントからの要求に対してサーバーが応答します
- コネクションレス:通信後は接続を切断します(HTTP/1.1では持続的接続も可能)
WebSocket・gRPCとの違い
HTTPと同じくアプリケーション層で使われる通信方式に、WebSocketやgRPCがあります。それぞれ得意な用途が異なるため、要件に応じて使い分けます。
| 項目 | HTTP(REST API) | WebSocket | gRPC |
|---|---|---|---|
| 通信方式 | リクエスト・レスポンス型(クライアント起点) | 双方向・常時接続 | HTTP/2上での高速RPC通信 |
| データ形式 | 主にJSON(テキスト) | 任意(テキスト・バイナリ) | Protocol Buffers(バイナリ) |
| 向いている用途 | 一般的なWeb API、CRUD操作 | チャット、通知、リアルタイム更新 | マイクロサービス間の高速内部通信 |
| ブラウザ対応 | 標準対応 | 標準対応 | grpc-webなど変換層が必要 |
HTTPメソッド
| メソッド | 目的 | 説明 |
|---|---|---|
| GET | データの取得 | リソースの取得、冪等性あり |
| POST | データの送信 | 新しいリソースの作成 |
| PUT | データの更新 | リソースの置き換え、冪等性あり |
| DELETE | データの削除 | リソースの削除、冪等性あり |
| PATCH | 部分的な更新 | リソースの一部を更新 |
| HEAD | ヘッダーの取得 | レスポンスヘッダーのみ取得 |
HTTPステータスコード
| 分類 | 範囲 | 代表例 | 説明 |
|---|---|---|---|
| 情報レスポンス | 1xx | 100 Continue | リクエストの継続処理 |
| 成功レスポンス | 2xx | 200 OK, 201 Created | リクエストが正常に処理された |
| リダイレクト | 3xx | 301 Moved Permanently | 追加のアクションが必要 |
| クライアントエラー | 4xx | 400 Bad Request, 404 Not Found | クライアント側のエラー |
| サーバーエラー | 5xx | 500 Internal Server Error | サーバー側のエラー |
HTTPヘッダー
よく使用されるリクエストヘッダー
- Content-Type:送信データの形式を指定
- Authorization:認証情報を含む
- User-Agent:クライアントソフトウェアの情報
- Accept:受け入れ可能なレスポンス形式
- Cache-Control:キャッシュ制御
よく使用されるレスポンスヘッダー
- Content-Type:レスポンスデータの形式
- Content-Length:レスポンスデータのサイズ
- Set-Cookie:クッキーの設定
- Location:リダイレクト先のURL
- Access-Control-Allow-Origin:CORS設定
HTTPリクエストの例
GET /api/users/123 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
HTTPレスポンスの例
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 156
Cache-Control: no-cache
{
"id": 123,
"name": "田中太郎",
"email": "tanaka@example.com",
"created_at": "2025-01-01T00:00:00Z"
}
HTTPのバージョン
HTTP/1.1
- 持続的接続(Keep-Alive)
- パイプライン化
- チャンク転送エンコーディング
HTTP/2
- バイナリプロトコル
- 多重化(Multiplexing)
- サーバープッシュ
- ヘッダー圧縮
HTTP/3
- QUIC(Quick UDP Internet Connections)ベース
- 接続の高速化
- パケットロス耐性の向上
バージョン比較表
| 項目 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| 策定年 | 1997年(RFC 2068) | 2015年(RFC 7540) | 2022年(RFC 9114) |
| トランスポート層 | TCP | TCP | QUIC(UDP) |
| データ形式 | テキストベース | バイナリ | バイナリ |
| 多重化 | 非対応(Head-of-Line Blocking発生) | 対応(TCPレベルでHOLブロッキングが残る) | 対応(ストリーム単位でHOLブロッキング解消) |
| 接続確立 | TCP+TLSハンドシェイクが必要 | TCP+TLSハンドシェイクが必要 | QUICにTLS1.3を統合し高速接続 |
セキュリティ
HTTPS
HTTPSはHTTP over SSL/TLSの略で、HTTPの通信をSSL/TLSで暗号化した安全な通信プロトコルです。
主要なセキュリティ機能
- 暗号化:通信内容の保護
- 認証:サーバーの正当性確認
- 改ざん検知:データの完全性保証
HTTPそのものには暗号化機能がなく、通信内容は平文でやり取りされます。そのため、ログイン情報や個人情報を扱う通信では必ずHTTPSを使用し、SSL/TLS証明書によってサーバーの正当性を検証することが不可欠です。近年ではブラウザがHTTP接続に対して警告を表示するようになり、常時HTTPS化(Always On SSL)が事実上の標準になっています。
実装例
JavaScript(Fetch API)
// GET リクエスト
fetch('/api/users/123')
.then(response => response.json())
.then(data => console.log(data));
// POST リクエスト
fetch('/api/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token
},
body: JSON.stringify({
name: '田中太郎',
email: 'tanaka@example.com'
})
})
.then(response => response.json())
.then(data => console.log(data));
Node.js(Express)
const express = require('express');
const app = express();
app.use(express.json());
// GET エンドポイント
app.get('/api/users/:id', (req, res) => {
const userId = req.params.id;
// ユーザー情報を取得
res.json({ id: userId, name: '田中太郎' });
});
// POST エンドポイント
app.post('/api/users', (req, res) => {
const { name, email } = req.body;
// ユーザーを作成
res.status(201).json({ id: 123, name, email });
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
HTTPの利点
- シンプルさ:理解しやすい構造
- 拡張性:新しい機能の追加が容易
- 汎用性:様々なアプリケーションに対応
- 標準化:RFC仕様として標準化
HTTPのデメリット・制限
- ステートレス性による制約:リクエストごとに独立しているため、ログイン状態などを維持するにはCookieやセッション、トークンなど別の仕組みが必要
- テキストベースのオーバーヘッド(HTTP/1.1):ヘッダーが冗長になりやすく、リクエスト数が多いページでは通信量が増加する
- Head-of-Line Blocking:HTTP/1.1やHTTP/2(TCP上)では、1つのリクエストの遅延が後続のリクエストをブロックする場合がある
- リアルタイム通信への不向き:リクエスト/レスポンス型のため、サーバーから任意のタイミングでデータを送るにはWebSocketやServer-Sent Eventsなど別技術が必要
実務での活用シーン・導入時の注意点
- REST APIの通信基盤:多くのWeb APIはHTTPのメソッド(GET/POST/PUT/DELETE)とステータスコードをそのまま活用して設計されます。
- CDN・キャッシュ戦略:Cache-ControlやETagなどのHTTPヘッダーを適切に設定することで、CDNやブラウザキャッシュを活用した高速化が可能です。
- 導入時の注意点:HTTP/2やHTTP/3への移行時は、対応するロードバランサー・CDN・クライアントライブラリのバージョンを事前に確認する必要があります。
- 導入時の注意点:本番環境では必ずHTTPS化し、混在コンテンツ(HTTPページ内のHTTPリソース読み込み)を避けることがセキュリティ上重要です。
関連技術
- REST API:RESTful Webサービスでの HTTP活用
- GraphQL:HTTPベースのクエリ言語
- WebSocket:HTTP上でのリアルタイム通信
- OAuth:HTTP認証プロトコル
- CORS:クロスオリジンリソース共有
関連Webサイト
2025〜2026年の最新動向
2025年はHTTP/3の普及率が50%を超え、CDN・クラウドサービスでデフォルト有効に。Early Hints(103)ステータスコードの実用化やStructured Fieldsの採用も進んでいます。
よくある質問(FAQ)
Q. HTTPとは?
A. HTTP(HyperText Transfer Protocol)は、Web上でクライアントとサーバー間の通信に使われるプロトコルです。ブラウザやAPIクライアントがリクエストを送り、サーバーがレスポンスを返すリクエスト/レスポンス型の通信方式です。
Q. HTTP/2とHTTP/3の違いは?
A. HTTP/2はTCP上でマルチプレキシング・ヘッダ圧縮を実現。HTTP/3はTCPの代わりにQUICプロトコル(UDP)を使い、接続確立の高速化とパケットロス時のパフォーマンス向上を実現しています。
Q. 主要なHTTPステータスコードは?
A. 200(成功)、201(作成成功)、301(恒久リダイレクト)、400(バッドリクエスト)、401(認証必要)、403(禁止)、404(未検出)、500(サーバーエラー)が最も一般的です。
Q. HTTPとHTTPSの違いは?
A. HTTPSはHTTPの通信をSSL/TLSで暗号化したものです。データの盗聴・改ざんを防止できるため、現在ではほぼすべてのWebサイトでHTTPS化が標準になっています。
Q. HTTPはステートフルですか、ステートレスですか?
A. HTTP自体はステートレスなプロトコルです。リクエストごとに独立しており、前回のリクエスト情報を保持しません。ログイン状態などを維持するにはCookieやセッション、トークンといった追加の仕組みが必要です。
