引っ越し先を教える「魔法の転送状」:301と302リダイレクトの決定的な違い
こんにちは!ネットワークセキュリティの世界へようこそ。
インフラエンジニアとして現場を歩いていると、避けては通れないのが「Webサイトの引っ越し」です。URLが変わったとき、古い住所にやってきたお客さんを新しい場所へスマートに誘導する……これこそが HTTPステータスコード 3xx系、いわゆる「リダイレクト」の役割です。
今回は、この「転送の仕組み」を、郵便配達に例えながら紐解いていきましょう。難しい技術用語は一旦置いておいて、まずはイメージを掴むところから始めてみてくださいね。
そもそも「リダイレクト」って何をしているの?
想像してみてください。あなたは古いアパートから新しいマンションへ引っ越しました。でも、古いアパートのポストには、まだあなた宛の手紙が届いてしまいますよね。
そこであなたは、郵便局に「転送届」を出します。すると郵便局員さんは、あなたの古い住所に届いた手紙に「宛先変更:新しい住所はここですよ」という付箋を貼って、新しいマンションまで届けてくれます。
Webの世界における 3xx リダイレクトは、まさにこの「転送届」の役割を果たしているんです。
301と302、何がそんなに違うの?
リダイレクトには大きく分けて 301 Moved Permanently と 302 Found の2種類があります。どちらも「あっちへ行ってね」という指示には変わりないのですが、その「ニュアンス」が全く違います。
1. 301 Moved Permanently: 「もうここには戻りません(恒久的な引っ越し)」
これは、「私はもう完全に引っ越しました!これからはずっと新しい住所を使ってくださいね」という強い意志表示です。
- ブラウザの反応: 「なるほど、この住所はもう使わないんだな」と学習します。
- キャッシュの魔法: ブラウザは
301を受け取ると、「次からはこのサイトを見るとき、わざわざ古い住所を経由せず、直接新しい住所へ行こう!」と判断し、自分の記憶(キャッシュ)に保存します。非常に効率的ですね。
2. 302 Found: 「ちょっと今だけこっちにいます(一時的な移動)」
これは、「今は工事中だから一時的にこっちに回しているけど、そのうちまた元の住所に戻るよ」という一時的な案内です。
- ブラウザの反応: 「ふむ、今はここにあるけど、また変わるかもしれないな」と考えます。
- キャッシュの扱い: ブラウザは
302をキャッシュしません。「次はどうなるかわからないから、とりあえずまた古い住所へ聞きに行こう」と、毎回律儀に元の住所を確認しにいくのです。
—
実際に動かしてみよう!:設定のサンプル
現場でWebサーバー(Apacheなど)を構築する際、この設定は欠かせません。設定ファイル(.htaccess など)に書くコードを見てみましょう。
301リダイレクトの設定例
「サイトを常時SSL化(httpからhttpsへ)したい!」という場合などは、この 301 を使います。
# 301リダイレクト:全てのアクセスをhttpsへ恒久的に転送する
RewriteEngine On
RewriteCond %{HTTPS} off
# 301を指定することで、検索エンジンにも「完全に移動したこと」を伝えます
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
302リダイレクトの設定例
「メンテナンス中だけ別のページを見せたい」といった場合には 302 を使います。
# 302リダイレクト:メンテナンス期間中だけ一時的に転送する
RewriteEngine On
# 一時的な移動なので、クライアントにキャッシュさせないよう302を使います
RewriteRule ^/$ /maintenance.html [R=302,L]
—
パケットが運ぶ「転送状」:Locationヘッダー
ブラウザが 301 や 302 を受け取ったとき、サーバーはどんな情報を送っているのでしょうか?
その正体は、Location という名前の「ヘッダー(手紙の封筒に書かれた宛先情報)」です。
サーバーから送られてくるレスポンスの中身は、こんなイメージです。
HTTP/1.1 301 Moved Permanently
Date: Mon, 01 Oct 2023 10:00:00 GMT
Location: https://new-site.example.com/ <-- ここに新しい住所が書かれています!
Content-Length: 0
ブラウザはこの Location ヘッダーを読み取った瞬間、ユーザーが操作しなくても自動的に「あ、新しい住所へ行かなきゃ!」と判断して、目的地へ再出発するのです。これが、私たちが普段意識することなくWebサイト間を移動できている理由なんですね。
まとめ:使い分けのルール
最後に、現場で迷わないための「使い分けのポイント」を整理しましょう。
- 301(恒久)を使う時:
- ドメインを新しくした時。
- HTTPからHTTPSへ完全に移行する時。
- SEOの評価を新しいページに引き継ぎたい時。
- 302(一時的)を使う時:
- サーバーメンテナンス中。
- キャンペーンページなど、期間限定で別の場所を見せたい時。
- A/Bテストでアクセスを一時的に分散させたい時。
「恒久的なのか、一時的なのか」。この視点を持つだけで、あなたのネットワーク構築の精度はグッと上がります。
最初は難しく感じるかもしれませんが、パケットを「手紙」、ステータスコードを「郵便局の指示」と捉えてみてください。ネットワークの仕組みは、実は私たちの身の回りの生活と驚くほど似ているんですよ。
さあ、次はどんなネットワークの旅に出かけましょうか?またお会いしましょう!
コメント