設定

HTTP/HTTPSの基礎知識|Web通信の仕組みを理解する

ネットワーク HTTP HTTPS

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:情報

コード意味
100Continue(処理を続行してよい)
101Switching Protocols(プロトコル切替)

2xx:成功

コード意味
200OK(リクエスト成功)
201Created(リソース作成成功)
204No Content(成功、レスポンスボディなし)

3xx:リダイレクト

コード意味
301Moved Permanently(恒久的な移動)
302Found(一時的な移動)
304Not Modified(キャッシュを使用)

4xx:クライアントエラー

コード意味
400Bad Request(不正なリクエスト)
401Unauthorized(認証が必要)
403Forbidden(アクセス禁止)
404Not Found(ページが見つからない)
405Method Not Allowed(許可されていないメソッド)
429Too Many Requests(リクエスト過多)

5xx:サーバーエラー

コード意味
500Internal Server Error(サーバー内部エラー)
502Bad Gateway(ゲートウェイエラー)
503Service Unavailable(サービス利用不可)
504Gateway Timeout(ゲートウェイタイムアウト)
よくある勘違い
403 Forbidden401 Unauthorizedの違い:
・401 = 認証されていない(ログインが必要)
・403 = 認証済みだがアクセス権がない(権限不足)

Step 5HTTPSとSSL/TLS

HTTPSは、HTTPにSSL/TLSによる暗号化を追加したプロトコルです。通信内容が暗号化されるため、第三者による盗聴や改ざんを防げます。

HTTPとHTTPSの違い

項目HTTPHTTPS
ポート番号80443
暗号化なしあり(SSL/TLS)
証明書不要必要
URLhttp://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-OriginCORS許可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等)を制御する