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を読むときは、次の順番で見ると迷いにくくなります。
- メソッド: 取得なのか、作成なのか、更新なのか
- URLパス: どのリソースに対する操作なのか
- ステータスコード: 成功したのか、クライアント側の問題か、サーバ側の問題か
- ヘッダ: 認証、Content-Type、キャッシュなどの付加情報
- ボディ: 実際に送受信されたデータ
開発者ツールのNetworkタブで1リクエストを開き、この順番で確認するだけでも、Webアプリの動きはかなり読みやすくなります。
中級者向け:API設計と運用で見るHTTP
HTTPは通信形式であると同時に、API設計の共通言語でもあります。
| 観点 | 実務での判断 |
|---|---|
| メソッド | GETで更新しない、POSTとPUT/PATCHの役割を分ける |
| ステータスコード | 400, 401, 403, 404, 409 を使い分ける |
| キャッシュ | 更新頻度とユーザー影響を考えて Cache-Control を設定する |
| 認証 | CookieやAuthorizationヘッダの扱いを決める |
| セキュリティ | HTTPS前提、HSTS、SameSite Cookieなどを検討する |
中級者は「通信できたか」だけでなく、クライアントが失敗時にどう回復できるか、ログで原因を追えるかまで含めてHTTPを設計します。
まとめ
- HTTP はリクエスト・レスポンスの構造を持つシンプルなプロトコル
- HTTPS は TLS による暗号化・認証・完全性保証を追加したもの
- HTTP/2 では多重化によりパフォーマンスが向上した
- 実務では、メソッド・ステータスコード・ヘッダ設計がAPIの使いやすさを左右する