インターネットでWebサイトを閲覧するとき、ブラウザとWebサーバの間では「HTTP」というプロトコルが利用されています。
ネットワークスペシャリストやCCNAなどの資格試験でも頻出の重要技術です。
本記事ではHTTPの基本からHTTP/3、QUIC、セキュリティ対策まで体系的に解説します。
HTTPとは?
HTTP(HyperText Transfer Protocol)は、WebブラウザとWebサーバ間でデータをやり取りするためのアプリケーション層プロトコルです。
例えばブラウザでURLを入力すると、
- ブラウザがHTTPリクエストを送信
- WebサーバがHTTPレスポンスを返却
- ブラウザがHTMLを表示
という流れで通信が行われます。
HTTPはTCP/IPのアプリケーション層で動作し、通常は以下のポート番号を利用します。
| プロトコル | ポート番号 |
|---|---|
| HTTP | 80 |
| HTTPS | 443 |
HTTPの概要
HTTPメソッド
HTTPメソッドはサーバに対する操作内容を表します。
| メソッド | 内容 |
|---|---|
| GET | データ取得 |
| POST | データ登録 |
| PUT | データ更新 |
| DELETE | データ削除 |
| PATCH | 一部更新 |
| HEAD | ヘッダー取得 |
| OPTIONS | 利用可能メソッド確認 |
例
GET /index.html HTTP/1.1
Host: example.com
HTTPステータスコード
サーバの処理結果を表します。
1xx:情報
| コード | 内容 |
|---|---|
| 100 | Continue |
2xx:成功
| コード | 内容 |
|---|---|
| 200 | OK |
| 201 | Created |
3xx:リダイレクト
| コード | 内容 |
|---|---|
| 301 | Moved Permanently |
| 302 | Found |
4xx:クライアントエラー
| コード | 内容 |
|---|---|
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
5xx:サーバエラー
| コード | 内容 |
|---|---|
| 500 | Internal Server Error |
| 503 | Service Unavailable |
REST API
REST(Representational State Transfer)はHTTPを利用したAPI設計思想です。
| 操作 | HTTPメソッド |
|---|---|
| 取得 | GET |
| 登録 | POST |
| 更新 | PUT/PATCH |
| 削除 | DELETE |
例:
GET /users/1
→ ユーザー情報取得
DELETE /users/1
→ ユーザー削除
HTTPヘッダー
HTTP通信に付加情報を与える領域です。
リクエストヘッダー
Host: example.com
User-Agent: Chrome
Accept: text/html
レスポンスヘッダー
Content-Type: text/html
Content-Length: 1024
Cookie
Cookieはサーバがブラウザへ保存させる小さなデータです。
利用例
- ログイン状態維持
- ショッピングカート
- アクセス解析
Cookie属性
| 属性 | 内容 |
|---|---|
| Expires | 有効期限 |
| Domain | 適用ドメイン |
| Path | 適用パス |
| Secure | HTTPSのみ送信 |
| HttpOnly | JavaScript参照禁止 |
| SameSite | CSRF対策 |
例
Set-Cookie: sessionid=12345;
Secure;
HttpOnly;
SameSite=Strict
HTTPの通信シーケンス
ユーザーがWebサイトへアクセスする流れです。
ブラウザ Webサーバ
|----HTTP Request---->|
| |
|<---HTTP Response----|
| |
実際にはDNSやTCP接続も含まれます。
DNS名前解決
↓
TCP接続確立
↓
HTTPリクエスト
↓
HTTPレスポンス
↓
TCP切断
HTTPSの場合はTCP接続後にTLSハンドシェイクが実施されます。
HTTPバージョンの違い
| 項目 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| プロトコル | TCP | TCP | QUIC(UDP) |
| 多重化 | × | ○ | ○ |
| ヘッダー圧縮 | × | ○ | |
| HoLブロッキング | 発生 | 一部発生 | 解消 |
| 通信効率 | 低 | 高 | 非常に高 |
HTTP/1.1
HTTP/1.1では1つのTCP接続上で複数リクエストを送信できます。
HTTPパイプライン
GET A
GET B
GET C
を連続送信可能です。
しかし応答は順番に返されます。
Response A
Response B
Response C
HoLブロッキング
HoL(Head of Line)ブロッキングとは、
先頭の処理が遅延すると後続処理も待たされる現象です。
重い画像
↓
軽いCSS
↓
軽いJS
画像の取得待ちでCSSやJSも遅延します。
HTTP/2
HTTP/2はHTTP/1.1の性能問題を大幅に改善しました。
ヘッダー圧縮
HTTPでは同じヘッダーが大量に送信されます。
User-Agent
Cookie
Host
HTTP/2では圧縮して送信します。
HPACK
HPACKはHTTP/2専用のヘッダー圧縮方式です。
同じヘッダーを辞書化して再利用します。
Host: example.com
↓
Index 1
通信量を削減できます。
ストリームの多重化
HTTP/1.1
Request
↓
Response
↓
Request
↓
Response
HTTP/2
Stream1
Stream2
Stream3
複数通信を同時処理できます。
フロー制御
受信側が処理可能な量だけ送信させる仕組みです。
送信可能量 = Window Size
受信バッファあふれを防止します。
HTTP/3
HTTP/3ではTCPを廃止しQUICを採用しました。
QUICとは
QUICはUDP上で動作する新しい通信プロトコルです。
特徴
- TLS統合
- 高速接続
- 再送遅延削減
- HoLブロッキング解消
HTTP/2との違い
HTTP/2
TCP
└─ Stream1
└─ Stream2
パケットロス発生
↓
TCP全体が再送待ち
↓
全ストリーム停止
HTTP/3
QUIC
└─ Stream1
└─ Stream2
パケットロス発生
↓
対象ストリームのみ再送
↓
他ストリームは継続
HTTPのセキュリティ
プロキシサーバ
クライアントとサーバの中継装置です。
フォワードプロキシ
PC
↓
Proxy
↓
Internet
用途
- キャッシュ
- フィルタリング
- アクセス制御
リバースプロキシ
Internet
↓
Proxy
↓
Web Server
用途
- 負荷分散
- SSL終端
- サーバ隠蔽
WAF
WAF(Web Application Firewall)はWebアプリケーション専用のファイアウォールです。
防御対象
- SQLインジェクション
- XSS
- CSRF
- ディレクトリトラバーサル
通常のFWよりもHTTPの中身を詳細に解析できます。
まとめ
- HTTPはWeb通信のためのアプリケーション層プロトコル
- HTTP通信はリクエストとレスポンスで構成
- REST APIはHTTPメソッドを活用する設計思想
- Cookieはログイン状態維持などに利用
- HTTP/1.1はHoLブロッキングが課題
- HTTP/2はヘッダー圧縮と多重化で高速化
- HTTP/3はQUICによりHoLブロッキングを解消
- プロキシやWAFによってWeb通信を保護できる

コメント