TinyURLやMetamarkなどのサービスはどのように機能しますか?
小さなURLキーを、元のURLへの「HTTPリダイレクト」を提供する[仮想?] Webページに関連付けるだけですか?それとももっと「魔法」がありますか?
[元の表現]私はTinyURLやMetamarkなどのURL短縮サービスをよく使用していますが、使用するたびに、これらのサービスがどのように機能するのか疑問に思います。別のページにリダイレクトする新しいファイルを作成しますか、それともサブドメインを使用しますか?
TinyURLやMetamarkなどのサービスはどのように機能しますか?
小さなURLキーを、元のURLへの「HTTPリダイレクト」を提供する[仮想?] Webページに関連付けるだけですか?それとももっと「魔法」がありますか?
[元の表現]私はTinyURLやMetamarkなどのURL短縮サービスをよく使用していますが、使用するたびに、これらのサービスがどのように機能するのか疑問に思います。別のページにリダイレクトする新しいファイルを作成しますか、それともサブドメインを使用しますか?
回答:
いいえ、ファイルを使用しません。そのようなリンクをクリックすると、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サービスがこれを提供しています)。
Moved
notに変えMoved Permanently
ます。これは微妙な違いです。タイムスタンプを追加することにより、ブラウザは、このタイムアウトに達したときにリソースが変更されたかどうかを確認する必要があると見なします。is.gdなどの他のものは通常の方法を使用し301 Moved Permanently
、ブラウザは再チェックする必要はありません(多くの場合そうします)。最後に、url4.euのようなサービスはまったくリダイレクトしませんが、最初に広告を表示します。301を使用しても、サービスはユニークビジターをカウントできますが、すべてのヒットをカウントできるわけではありません。
他の人はリダイレクトがどのように機能するかについて答えましたが、あなたは彼らが彼らの小さな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つ増やします。
これは非常に単純化された例ですが、一般的な考え方を理解できるはずです。
O(1)
重複を見つけるためのルックアップを実行できます。その後、既存の小さなURLをルーティングするか、新しいURLを生成することもできます。私の知る限りgoo.gl
、同じURLの小さなURLを再利用しています。このページのあなたの側でこれを試してください:あなたはこれを手に入れgoo.gl/8gVb8X
ますか?
@A Salcedoの回答の拡張として:
一部のURL短縮サービス(Tinyarro.ws)は、Unicode(UTF-8)を使用して文字を短縮URLにエンコードすることで極端になり、追加の記号を追加する前に、より多くのWebサイトを許可します。ほとんどのUTF-8は、シンボルごとのサイトから〜にぶつかる((IRI)RFC 3987がほとんどのブラウザーで処理される)使用が許可されているためです。62
1,112,064
全体を見ると、1.2366863e + 12のサイトを2つの記号(1,112,064*1,112,064
)でエンコードできます-2009年11月に、短縮されたリンクに10億回bit.ly
アクセスされ2.1
ました(その頃、bit.lyとTinyURLが最も広く使用されているURL短縮サービスでした)。これは、2つのシンボルに収まるよりも600倍少ないため、すべてのURL短縮サービスが存続している間は、3番目のシンボルを追加するまで最低20年間は継続する必要があります。