HTTP/HTTPSの基礎知識
Web通信の仕組みを理解する
HTTPとHTTPSの違い、リクエスト/レスポンスの仕組み、ステータスコード、SSL/TLSの基本まで、Web通信の基礎をわかりやすく解説します。
こんな人向けの記事です
- HTTPとHTTPSの違いを正しく理解したい
- リクエストとレスポンスの仕組みを知りたい
- ステータスコードの意味を把握したい
Step 1HTTPとは
HTTP(HyperText Transfer Protocol)は、WebブラウザとWebサーバー間でデータをやり取りするための通信プロトコルです。
私たちがWebサイトを閲覧する際、ブラウザはHTTPを使ってサーバーにページのデータを要求し、サーバーがそのデータを返します。
プロトコルとは
通信の「約束事」のことです。HTTPは「こういう形式でデータを送って、こういう形式で返す」というルールを定めています。
URLの構造
https://example.com:443/path/to/page?key=value#section
|_____| |_________| |_| |____________| |_______| |______|
プロトコル ホスト名 ポート パス クエリ フラグメント
Step 2リクエストとレスポンス
HTTP通信はリクエスト(要求)とレスポンス(応答)のペアで成り立ちます。
リクエストの構造
HTTPリクエスト例
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Accept-Language: ja
レスポンスの構造
HTTPレスポンス例
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
<!DOCTYPE html>
<html>
<body>Hello World</body>
</html>
通信の流れ
1. ブラウザがサーバーにリクエストを送信2. サーバーがリクエストを処理
3. サーバーがレスポンスを返送
4. ブラウザがレスポンスを受け取り画面に表示
Step 3HTTPメソッド
HTTPメソッドは、サーバーに対して何をしたいかを伝えるものです。
| メソッド | 用途 | 例 |
|---|---|---|
GET | データの取得 | ページの表示、検索 |
POST | データの送信・作成 | フォーム送信、ログイン |
PUT | データの更新(全体) | ユーザー情報の更新 |
PATCH | データの部分更新 | 名前だけ変更 |
DELETE | データの削除 | 記事の削除 |
HEAD | ヘッダーのみ取得 | ファイルの存在確認 |
OPTIONS | 対応メソッドの確認 | CORS プリフライト |
curlでのHTTPメソッド指定
# GETリクエスト
curl https://api.example.com/users
# POSTリクエスト(データ送信)
curl -X POST -H "Content-Type: application/json" \
-d '{"name": "太郎", "email": "taro@example.com"}' \
https://api.example.com/users
# DELETEリクエスト
curl -X DELETE https://api.example.com/users/1
Step 4ステータスコード
ステータスコードは、サーバーがリクエストの処理結果を3桁の数字で返すものです。
1xx:情報
| コード | 意味 |
|---|---|
100 | Continue(処理を続行してよい) |
101 | Switching Protocols(プロトコル切替) |
2xx:成功
| コード | 意味 |
|---|---|
200 | OK(リクエスト成功) |
201 | Created(リソース作成成功) |
204 | No Content(成功、レスポンスボディなし) |
3xx:リダイレクト
| コード | 意味 |
|---|---|
301 | Moved Permanently(恒久的な移動) |
302 | Found(一時的な移動) |
304 | Not Modified(キャッシュを使用) |
4xx:クライアントエラー
| コード | 意味 |
|---|---|
400 | Bad Request(不正なリクエスト) |
401 | Unauthorized(認証が必要) |
403 | Forbidden(アクセス禁止) |
404 | Not Found(ページが見つからない) |
405 | Method Not Allowed(許可されていないメソッド) |
429 | Too Many Requests(リクエスト過多) |
5xx:サーバーエラー
| コード | 意味 |
|---|---|
500 | Internal Server Error(サーバー内部エラー) |
502 | Bad Gateway(ゲートウェイエラー) |
503 | Service Unavailable(サービス利用不可) |
504 | Gateway Timeout(ゲートウェイタイムアウト) |
よくある勘違い
403 Forbiddenと401 Unauthorizedの違い:・401 = 認証されていない(ログインが必要)
・403 = 認証済みだがアクセス権がない(権限不足)
Step 5HTTPSとSSL/TLS
HTTPSは、HTTPにSSL/TLSによる暗号化を追加したプロトコルです。通信内容が暗号化されるため、第三者による盗聴や改ざんを防げます。
HTTPとHTTPSの違い
| 項目 | HTTP | HTTPS |
|---|---|---|
| ポート番号 | 80 | 443 |
| 暗号化 | なし | あり(SSL/TLS) |
| 証明書 | 不要 | 必要 |
| URL | http:// | https:// |
| 安全性 | 低い | 高い |
SSL/TLSハンドシェイクの流れ
TLSハンドシェイク
クライアント サーバー
| |
|--- ClientHello ------------->| 対応する暗号方式を提示
|<-- ServerHello --------------| 暗号方式を決定
|<-- Certificate -------------| サーバー証明書を送信
|<-- ServerHelloDone ----------|
|--- ClientKeyExchange ------->| 共通鍵の素材を送信
|--- ChangeCipherSpec -------->| 暗号化通信に切替
|--- Finished ---------------->|
|<-- ChangeCipherSpec ---------|
|<-- Finished -----------------|
| |
|====== 暗号化通信開始 =========|
Let's Encryptで無料SSL証明書
Let's Encryptを使えば、無料でSSL証明書を取得できます。Certbotツールで自動更新も可能です。sudo certbot --nginx -d example.com
Step 6HTTPヘッダーの役割
HTTPヘッダーは、リクエストやレスポンスにメタ情報を付与するものです。
よく使うリクエストヘッダー
| ヘッダー | 役割 | 例 |
|---|---|---|
Host | リクエスト先のホスト名 | Host: example.com |
User-Agent | クライアントの情報 | User-Agent: Mozilla/5.0 |
Accept | 受け入れるコンテンツタイプ | Accept: text/html |
Authorization | 認証情報 | Authorization: Bearer xxx |
Content-Type | 送信データの形式 | Content-Type: application/json |
Cookie | クッキー情報 | Cookie: session_id=abc123 |
よく使うレスポンスヘッダー
| ヘッダー | 役割 | 例 |
|---|---|---|
Content-Type | レスポンスの形式 | Content-Type: text/html |
Set-Cookie | クッキーの設定 | Set-Cookie: id=abc; Secure |
Cache-Control | キャッシュの制御 | Cache-Control: max-age=3600 |
Location | リダイレクト先 | Location: /new-page |
Access-Control-Allow-Origin | CORS許可 | Access-Control-Allow-Origin: * |
セキュリティヘッダーも忘れずに
本番環境では以下のセキュリティヘッダーの設定を推奨します:・
Strict-Transport-Security(HTTPS強制)・
X-Content-Type-Options: nosniff(MIMEタイプ推測防止)・
X-Frame-Options: DENY(クリックジャッキング防止)・
Content-Security-Policy(XSS防止)
まとめ
- HTTPはWebブラウザとサーバー間の通信プロトコル
- 通信はリクエストとレスポンスのペアで成り立つ
- GET・POST・PUT・DELETEなどのメソッドで操作を指定する
- ステータスコードで処理結果を3桁の数字で表す
- HTTPSはSSL/TLSで暗号化されたHTTP通信
- HTTPヘッダーでメタ情報(認証・キャッシュ・CORS等)を制御する