URL 短縮サービスの技術的な仕組みは、ショートコード生成、データベース保存、HTTP リダイレクトの 3 つの要素で構成されています。この記事では、短縮 URL がどのように生成され、ユーザーを元の URL へ転送するのかを、実際の HTTP レスポンス例を交えて解説します。
まず、ユーザーが長い URL を入力すると、サービス側でユニークなショートコードを生成します。生成方法にはいくつかのアプローチがあります。ランダムな英数字列を生成する方法、元の URL のハッシュ値 (SHA-256 など) から先頭数文字を抽出する方法、連番をベース 62 エンコードする方法などです。ベース 62 エンコードとは、0 〜 9 の数字 10 文字、a 〜 z の小文字 26 文字、A 〜 Z の大文字 26 文字の計 62 文字を使って数値を表現する方式です。たとえば、連番 100000 をベース 62 に変換すると "q0U" (3 文字) になります。 6 文字のコードであれば 62 の 6 乗 = 約 568 億通りの組み合わせがあり、大規模なサービスでもコードが足りなくなりにくい数です。ハッシュ方式は同一 URL に対して常に同じコードを生成できる利点がありますが、衝突 (異なる URL が同じコードになる) への対処が必要です。連番方式は衝突が発生しませんが、コードが予測可能になるためセキュリティ上の配慮が求められます。
生成されたショートコードと元の URL の対応関係は、データベースに保存されます。NoSQL データベース (DynamoDB など) やリレーショナルデータベースを使う例があり、高速な読み取り性能が重視されます。短縮 URL へのアクセスは読み取り操作が大半を占めるため、キャッシュ層 (Redis、Memcached など) を設けると、レスポンスを速くできます。大規模サービスでは、CloudFront などの CDN をオリジンサーバーの前段に配置し、リダイレクトレスポンス自体をエッジロケーションにキャッシュし、利用者に近い場所からリダイレクトを返す作りがあります。ただし、CDN キャッシュを使う場合は 301 リダイレクトのキャッシュ期間に注意が必要です。リンク先を変更してもキャッシュが残っていると古い URL へ転送され続けるため、TTL (キャッシュ有効期間) の設計が重要になります。
ユーザーが短縮 URL にアクセスすると、サーバーは HTTP リダイレクトを実行します。実際のリダイレクトレスポンスは次のような HTTP ヘッダーで構成されます。「 HTTP/1.1 301 Moved Permanently 」「 Location: https://example.com/very/long/original-page?utm_source=campaign 」「 Cache-Control: max-age=86400 」「 Content-Length: 0 」。ブラウザーはこの Location ヘッダーを読み取り、指定された URL へ自動的に遷移します。リダイレクトには主に 301 (恒久的リダイレクト) と 302 (一時的リダイレクト) の 2 種類があります。 301 リダイレクトでブラウザーにキャッシュされている間、2 回目以降のアクセスは速くなりますが、サーバーを経由しないため、アクセス解析の精度が下がります。 302 リダイレクトは毎回サーバーを経由するので、クリックを数えやすくなります。トラッキングの精度を優先して 302 を使う短縮 URL サービスもあります。
ターミナルで curl コマンドを使えば、リダイレクトの動作を直接確認できます。「 curl -v -L https://short.url/abc 」を実行すると、レスポンスヘッダーに HTTP ステータスコードと Location ヘッダーが表示され、curl がこの Location ヘッダーに従って次の URL へ進む様子を確かめられます。「-I 」オプションを使えばヘッダーのみを取得でき、リダイレクトチェーンの確認に便利です。
DNS 解決からリダイレクト完了までの流れは次のとおりです。ブラウザーが短縮 URL のドメインを DNS で解決し、サーバーの IP アドレスを取得します。次に TLS ハンドシェイクを経て HTTPS 接続を確立し、サーバーへ HTTP GET リクエストを送信します。サーバーがショートコードをデータベースまたはキャッシュで検索して元の URL を取得し、Location ヘッダーに元の URL を設定したリダイレクトレスポンスを返します。ブラウザーが元の URL へ遷移し、同様の DNS 解決と接続確立を経てページを表示します。 CDN の利用は、最初の DNS 解決からリダイレクトレスポンスの受信までの時間を縮める助けになります。
リダイレクト方式の選択は、用途に応じたトレードオフです。 SEO を重視する恒久的なリンクには 301 が適しており、301 リダイレクトでは、リンクジュース (ページランクの評価値) がリダイレクト先に引き継がれるとされています。一方、クリック計測の正確性を重視するマーケティング用途には 302 が適しています。一部のサービスでは、ユーザーがリダイレクトタイプを選択できるオプションも提供されています。