HTTP とは
HTTP(HyperText Transfer Protocol)は、Web サーバとクライアント(ブラウザ)が通信するためのプロトコルです。テキストベースでシンプルな構造を持ちます。
HTTP リクエスト・レスポンスの構造
リクエスト
GET /articles HTTP/1.1
Host: example.com
Accept: text/html
User-Agent: Mozilla/5.0
- メソッド:GET, POST, PUT, DELETE, PATCH など
- パス:リクエストするリソースの URI
- ヘッダ:付加情報(Content-Type, Authorization など)
- ボディ:POST/PUT 時のデータ(JSON など)
レスポンス
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
<html>...</html>
HTTP ステータスコード
| コード | 意味 | 例 |
|---|---|---|
| 2xx | 成功 | 200 OK, 201 Created |
| 3xx | リダイレクト | 301 Moved Permanently, 302 Found |
| 4xx | クライアントエラー | 400 Bad Request, 401 Unauthorized, 404 Not Found |
| 5xx | サーバエラー | 500 Internal Server Error, 503 Service Unavailable |
HTTPS とは
HTTPS(HTTP Secure)は HTTP を TLS(Transport Layer Security)で暗号化したものです。
TLS の役割
- 暗号化:通信内容を第三者が読めないようにする
- 認証:接続先サーバが正規のものかを確認(デジタル証明書)
- 完全性:データが改ざんされていないことを保証
TLS ハンドシェイクの流れ
クライアント サーバ
|-- ClientHello ------------> | 対応する暗号スイートを提示
|<-- ServerHello + 証明書 --- | 使用する暗号スイートを決定
|-- 鍵交換 ----------------> |
|<---------- 暗号通信開始 --- |
HTTP/2 と HTTP/3
| 特徴 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| 多重化 | なし | あり | あり |
| ヘッダ圧縮 | なし | HPACK | QPACK |
| トランスポート | TCP | TCP | QUIC(UDP ベース) |
| サーバプッシュ | なし | あり | 廃止予定 |
まとめ
- HTTP はリクエスト・レスポンスの構造を持つシンプルなプロトコル
- HTTPS は TLS による暗号化・認証・完全性保証を追加したもの
- HTTP/2 では多重化によりパフォーマンスが向上した