web-dev-qa-db-ja.com

ショートURLサービスはどのように機能しますか?

TinyURL または Metamark などのサービスはどのように機能しますか?
彼らは単純に元のURLへの「HTTPリダイレクト」を提供する[仮想?] Webページに小さなURLキーを関連付けますか?それとも「魔法」がありますか?

[元の文言] TinyURL、MetamarkなどのURL短縮サービスをよく使用しますが、使用するたびに、これらのサービスがどのように機能するのか疑問に思います。別のページにリダイレクトする新しいファイルを作成しますか、またはサブドメインを使用しますか?

99
Nathan Campos

いいえ、彼らはファイルを使用しません。そのようなリンクをクリックすると、HTTPリクエストが http://bit.ly/duSk8wK (この質問へのリンク)のような完全なURLでサーバーに送信されます。彼らはパス部分を読みます(ここでduSk8wK)、データベースにマップします。データベースで、彼らは説明(時々)、あなたの名前(時々)、そして実際のURLを見つけます。次に、リダイレクトを発行します。リダイレクトは、HTTP 302応答とヘッダー内のターゲットURLです。

この直接リダイレクトは重要です。ファイルを使用するか、最初にHTMLをロードしてからリダイレクトする場合、ブラウザーはTinyUrlを履歴に追加しますが、これは望みのものではありません。また、リダイレクト先のサイトには、リファラー(元々のサイト)がTinyUrlリンクが存在するサイト(つまり、リンク先のTwitter.com、自分のサイト)として表示されます。これも同様に重要であるため、サイトの所有者は人々がどこから来ているのかを見ることができます。これも、リダイレクトするページが読み込まれると機能しません。

PS:リダイレクトにはさらに多くの種類があります。 HTTP 301は、永続的なリダイレクトを意味します。その場合、ブラウザはbit.lyまたはTinyUrlサイトを要求せず、それらのサイトはヒットをカウントします。そのため、一時的なリダイレクトであるHTTP 302が使用されます。ブラウザは毎回TinyUrl.comまたはbit.lyを要求します。これにより、ヒット数をカウントできます(一部の小さなURLサービスがこれを提供します)。

218
Abel

他の人はリダイレクトがどのように機能するかと答えましたが、あなたは彼らが彼らの小さなURLをどのように生成するかを知っているべきです。短縮URLの一意のコードを生成するために、URLのハッシュを作成すると誤って聞いてしまいます。ほとんどの場合、これは正しくありません。ハッシュアルゴリズムを使用していません(衝突が発生する可能性がある場合)。

人気のあるURL短縮サービスのほとんどは、URLのデータベースにあるIDを取得し、それをBase 36 [a-z0-9](大文字と小文字を区別しない)またはBase 62(大文字と小文字を区別する)に変換します。

TinyURLデータベーステーブルの簡単な例:

ID       URL                           VisitCount
 1       www.google.com                        26
 2       www.stackoverflow.com               2048
 3       www.reddit.com                        64
...
 20103   www.digg.com                         201
 20104   www.4chan.com                         20

柔軟なルーティングを可能にするWebフレームワークにより、着信URLの処理が非常に簡単になります(Ruby、ASP.NET MVCなど)。

そのため、Webサーバーには(擬似コード)のようなルートアクションがあります。

Route: www.mytinyurl.com/{UrlID}
Route Action: RouteURL(UrlID);

これは、ドメインwww.mytinyurl.comの後にテキストがあるサーバーへの着信要求を、関連するメソッドRouteURLにルーティングします。 URLのスラッシュの後に渡されるテキストをそのメソッドに提供します。

だから、あなたが要求したとしましょう:www.mytinyurl.com/fif

次に、「fif」がメソッドRouteURL(String UrlID)に渡されます。次に、RouteURLは「fif」をそのbase10に相当する20103に変換し、ID 20103(この場合はwww.digg.com)の下に保存されているURLにリダイレクトするデータベースリクエストが行われます。また、正しいURLにリダイレクトする前に、Diggの訪問数を1つ増やします。

これは非常に単純化された例ですが、一般的なアイデアを得ることができるはずです。

105
A Salcedo

@A Salcedo回答の拡張として:

一部のURL短縮サービス(Tinyarro.ws)は、Unicode(UTF-8)を使用して短縮URLの文字をエンコードすることにより極端になります。ほとんどの UTF-8は使用が許可されているため(IRI)ほとんどのブラウザで処理されるRFC 398762シンボルごとのサイト〜1,112,064

遠近感を出すために、2つのシンボル(1,112,064*1,112,064)-2009年11月、bit.lyアクセスされました2.1 billion times( その頃、bit.lyとTinyURLは最も広く使用されていたURL短縮サービスでした。 )〜600倍2つのシンボルに収まるので、すべてのURL短縮サービスが存続する期間は、3番目のシンボルが追加されるまで最低20年は続きます。

7

簡単に言えば、URL短縮サービスは、任意の長い文字列(元の長いくだらないURL)を短く滑らかな文字列にマッピングします。これは、暗号化のためにルックアップテーブル、HashMap、md5ハッシュなどを作成するために最も一般的に使用されるハッシュに他なりません。

URL短縮プロセスを理解するために、GitHubでデモプロジェクトとブログ投稿を作成しました。これを参照して、役立つかどうかを教えてください。

ブログ投稿: RL短縮

3
Anand Joshi