HTTPリダイレクトは、アクセスしたURLに対してサーバーが別のURLを案内し、ブラウザーがそのURLへ改めてリクエストを送る仕組みです。ページのデータをサーバー同士でそのまま転送する、という意味ではありません。
古いブックマークを開いたら、アドレス欄が別のURLに変わってページが表示された。途中で「移動します」という画面が出なくても、ブラウザーが案内を受けて次のURLへ進んでいることがあります。
「転送」という言葉だけでは、ページを運んだのか、見に行く先が変わったのかが曖昧です。ここでは、Webページを開くときのHTTPリダイレクトに絞り、誰が次の要求を送るのかを追います。
受け取るのは、次にアクセスするURLの案内
最初のURLにアクセスしたとき、サーバーは目的のページをそのまま返すとは限りません。「こちらのURLへアクセスしてください」という応答を返すこともあります。ブラウザーがこの案内に従うと、移動先へ新しい要求を送ります。
要求を「リクエスト」、それに対する返事を「レスポンス」と呼びます。この基本はHTTPとはで扱っています。リダイレクトでは、最初の返事が、次の要求を出すきっかけになるのです。
窓口で用事を頼んだら、「その用事は、あちらの窓口へ」と案内された場面を考えると分かりやすくなります。案内を受けた人が、次の窓口へ頼み直す。この人に当たるのがブラウザーです。
ただし、コンピューターの中で人が歩くわけではありません。行き先を表すURLを使って、新たな通信を始めます。同じサーバーが扱う別のURLへ移る場合もあり、別の建物や機械へ移ることが条件ではありません。
最初の要求と、移動先への要求を分けて見る

たとえば、古い案内ページから新しい案内ページへ移る場合を、次の四つに分けられます。ここでは保存済みの応答などを省いた、基本の流れを見ています。
| 順番 | 誰から誰へ | やり取りするもの |
|---|---|---|
| 1 | ブラウザーから最初のURLのサーバーへ | 古い案内ページを求める要求 |
| 2 | サーバーからブラウザーへ | 新しいURLを示す案内の応答 |
| 3 | ブラウザーから移動先URLのサーバーへ | 新しい案内ページを求める要求 |
| 4 | 移動先のサーバーからブラウザーへ | 新しいページの応答 |
注目したいのは3番です。次のURLへ要求するのもブラウザーです。最初のサーバーが、ブラウザーの代わりに移動先のページを取り寄せて渡す、という説明にはなりません。
イト
転送って、古いサーバーから新しいサーバーへ、ページを丸ごと送ることだと思ってた
マコト
この場合は、ブラウザーへ次のURLを知らせているんだ。案内を受けて、ブラウザーがもう一度頼みに行くよ
案内のあとで目的のページを受け取れれば、ふだんは途中のやり取りを意識せずに読めます。一方、移動先へ接続できなければ、ページの表示まで完了したことにはなりません。案内を受け取ることと、その先の内容を受け取ることは別です。
Locationは行き先、ステータスコードは応答の種類
HTTPの応答には、本文以外にも情報を付けられます。別のURLへ案内する応答では、主に次の二つが組み合わさります。
| 応答に含まれるもの | 役割 |
|---|---|
| 301などのステータスコード | どの種類の応答なのかを示す |
| Locationというヘッダー | 次にアクセスするURLを示す |
「ヘッダー」は、応答に付く情報の欄です。Locationは「行き先の欄」と考えると、コードとの違いをつかめます。たとえば301は、対象が新しい恒久的なURLに移ったことを表すコードです。番号だけで行き先のURLまで分かるわけではありません。
ブラウザーは、応答の種類とLocationの内容などを見て、次の要求を出します。いつも利用者が移動ボタンを押すわけではなく、自動で進む場合が多いため、アドレス欄の変化だけが目に入ることもあります。
3から始まるコードはリダイレクトの分類ですが、すべてが別URLへ移す指示ではありません。たとえば304は保存済みの内容を使うための応答です。ここでは番号一覧を暗記せず、「行き先を案内する応答を受け、そこへ要求し直す」という流れを押さえましょう。
URLの変化だけでは、内部の仕組みまでは決まらない
リダイレクトを使えば、古い入口から新しいURLへ案内できます。同じサイト内でURLを整えたり、別のドメインへ案内したりすることもあります。
ただし、画面が切り替わったりURLが変わったりする方法は、HTTPリダイレクトだけではありません。ページのHTMLやJavaScriptが、次のページへ進めることもあります。見た目が似ていても、サーバーのHTTP応答で案内されたのか、受け取ったページ側が動いたのかは別です。
また、ブラウザーのURLを変えず、サーバー側で別のサーバーから内容を受け取って応答する「中継」もあります。今回のリダイレクトの図とは、次の要求を出す主体が違います。名前に「転送」とあっても、どこで何をしているかを分けて読むことが大切です。
移動先のURLが示されたからといって、内容の正しさや安全性まで保証されるわけでもありません。URLの読み方を確かめたい場合は、URLとはへ進めます。知らないページを開いて動作を試す必要はありません。
入口と到着先、二度目の要求を確かめよう
まずは上の図を見て、次の三つを指で追ってみてください。
- 入口:ブラウザーが最初に要求したURLはどちらか。
- 案内:次のURLを知らせた応答はどの矢印か。
- 次の要求:案内を受けたあと、誰が右側へ要求を送ったか。
答えは、入口が左、案内が左からブラウザーへ戻る金色の矢印、次の要求がブラウザーから右へ向かう青い矢印です。左右のサーバーを直接つなぐ矢印がないことにも注目しましょう。
小さなクイズです。「最初のURLから移動先のURLへ変わった。ページの本体が、最初のサーバーから移動先サーバーへ送られたという意味?」。答えは「その意味ではない」です。HTTPリダイレクトでは、ブラウザーが案内を受け、移動先へ要求を送り直します。
普段から使っているページで入口と到着先のURLが違うことに気づいたら、この流れを思い出せます。ただし、URLの変化だけでHTTPリダイレクトだったと断定せず、仕組みの説明と画面で観察できたことを分けましょう。応答の番号をもう少し知りたい場合は、HTTPステータスコードに基本の分類があります。
リダイレクトのよくある質問
Q1. リダイレクトは、別のサイトへ移るときだけ使いますか?
A. 同じサイト内の別URLへ案内する場合にも使います。同じサーバーが扱っているかどうかより、ブラウザーが案内されたURLへ要求し直すことに注目します。
Q2. リダイレクトすると、必ずページが表示されますか?
A. 案内を受けても、移動先へ接続できるとは限りません。案内が循環して元へ戻るなど、移動が完了しない場合もあります。案内の応答と、移動先のページの応答は別です。
Q3. URLが変われば、HTTPリダイレクトですか?
A. そうとは限りません。HTMLやJavaScriptで次のページへ進む場合もあるため、アドレス欄の変化だけではHTTPリダイレクトだと断定できません。
この記事について
LAB WHITEBOARD
リダイレクトを一文で説明してみよう
「入口URLと到着URLを分け、二度目の要求をする主体を説明できる。」を、いまの自分の言葉で一文にしてみてください。途中の説明でも大丈夫です。



