114

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

【原文】TinyURLやMetamarkなどのURL短縮サービスをよく利用していますが、毎回、これらのサービスがどのように機能するのか気になります。別のページにリダイレクトする新しいファイルを作成しますか、それともサブドメインを使用しますか?

4

4 に答える 4

236

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

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

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

于 2009-10-13T19:50:06.650 に答える
113

他の人がリダイレクトの仕組みについて回答していますが、小さな 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 増やします。

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

于 2009-10-13T20:40:33.723 に答える