リダイレクトとは?別のURLへ移るとき、ブラウザーがすること

ラボの机に置いた二つの窓口と案内板、手前のブラウザーで別の行き先への案内を表したイラスト

30秒でわかる答え

HTTPリダイレクトは、アクセスしたURLに対してサーバーが別のURLを案内し、ブラウザーがそのURLへ改めてリクエストを送る仕組みです。ページのデータをサーバー同士でそのまま転送する、という意味ではありません。

HTTPリダイレクトは、アクセスしたURLに対してサーバーが別のURLを案内し、ブラウザーがそのURLへ改めてリクエストを送る仕組みです。ページのデータをサーバー同士でそのまま転送する、という意味ではありません。

古いブックマークを開いたら、アドレス欄が別のURLに変わってページが表示された。途中で「移動します」という画面が出なくても、ブラウザーが案内を受けて次のURLへ進んでいることがあります。

「転送」という言葉だけでは、ページを運んだのか、見に行く先が変わったのかが曖昧です。ここでは、Webページを開くときのHTTPリダイレクトに絞り、誰が次の要求を送るのかを追います。

受け取るのは、次にアクセスするURLの案内

最初のURLにアクセスしたとき、サーバーは目的のページをそのまま返すとは限りません。「こちらのURLへアクセスしてください」という応答を返すこともあります。ブラウザーがこの案内に従うと、移動先へ新しい要求を送ります。

要求を「リクエスト」、それに対する返事を「レスポンス」と呼びます。この基本はHTTPとはで扱っています。リダイレクトでは、最初の返事が、次の要求を出すきっかけになるのです。

窓口で用事を頼んだら、「その用事は、あちらの窓口へ」と案内された場面を考えると分かりやすくなります。案内を受けた人が、次の窓口へ頼み直す。この人に当たるのがブラウザーです。

ただし、コンピューターの中で人が歩くわけではありません。行き先を表すURLを使って、新たな通信を始めます。同じサーバーが扱う別の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とはへ進めます。知らないページを開いて動作を試す必要はありません。

入口と到着先、二度目の要求を確かめよう

まずは上の図を見て、次の三つを指で追ってみてください。

  1. 入口:ブラウザーが最初に要求したURLはどちらか。
  2. 案内:次のURLを知らせた応答はどの矢印か。
  3. 次の要求:案内を受けたあと、誰が右側へ要求を送ったか。

答えは、入口が左、案内が左からブラウザーへ戻る金色の矢印、次の要求がブラウザーから右へ向かう青い矢印です。左右のサーバーを直接つなぐ矢印がないことにも注目しましょう。

小さなクイズです。「最初のURLから移動先のURLへ変わった。ページの本体が、最初のサーバーから移動先サーバーへ送られたという意味?」。答えは「その意味ではない」です。HTTPリダイレクトでは、ブラウザーが案内を受け、移動先へ要求を送り直します。

普段から使っているページで入口と到着先のURLが違うことに気づいたら、この流れを思い出せます。ただし、URLの変化だけでHTTPリダイレクトだったと断定せず、仕組みの説明と画面で観察できたことを分けましょう。応答の番号をもう少し知りたい場合は、HTTPステータスコードに基本の分類があります。

リダイレクトのよくある質問

Q1. リダイレクトは、別のサイトへ移るときだけ使いますか?

A. 同じサイト内の別URLへ案内する場合にも使います。同じサーバーが扱っているかどうかより、ブラウザーが案内されたURLへ要求し直すことに注目します。

Q2. リダイレクトすると、必ずページが表示されますか?

A. 案内を受けても、移動先へ接続できるとは限りません。案内が循環して元へ戻るなど、移動が完了しない場合もあります。案内の応答と、移動先のページの応答は別です。

Q3. URLが変われば、HTTPリダイレクトですか?

A. そうとは限りません。HTMLやJavaScriptで次のページへ進む場合もあるため、アドレス欄の変化だけではHTTPリダイレクトだと断定できません。

この記事について

LAB WHITEBOARD

リダイレクトを一文で説明してみよう

「入口URLと到着URLを分け、二度目の要求をする主体を説明できる。」を、いまの自分の言葉で一文にしてみてください。途中の説明でも大丈夫です。