Bagaimana cara kerja layanan URL singkat?

105

Bagaimana cara kerja layanan seperti TinyURL atau Metamark ?
Apakah mereka hanya mengaitkan kunci URL kecil dengan halaman web [virtual?] Yang hanya menyediakan "pengalihan HTTP" ke URL asli? atau apakah ada lebih banyak "keajaiban" di dalamnya?

[Kata-kata asli] Saya sering menggunakan layanan pemendek URL seperti TinyURL, Metamark, dan lainnya, tetapi setiap kali saya melakukannya, saya bertanya-tanya bagaimana layanan ini bekerja. Apakah mereka membuat file baru yang akan dialihkan ke halaman lain atau apakah mereka menggunakan subdomain?

Nathan Campos
sumber
1
Untuk mengubah pertanyaan [non-]: "Bagaimana layanan seperti TinyURL bekerja? Apakah mereka hanya mengaitkan kunci URL kecil dengan halaman web [virtual?] Yang hanya menyediakan" HTTP redirect "ke URL asli? Apakah ini yang Anda bertanya?
mjv
1
Apakah url yang dipersingkat pernah kedaluwarsa? (yaitu entri database untuk URL tersebut dihapus dari server)
thd
2
@thd: ya, tetapi dapat bergantung pada hit (harian), dan kebijakan penyedia layanan url singkat. Mereka mungkin juga mengizinkan untuk tidak pernah kedaluwarsa, beberapa meminta keanggotaan untuk itu.
Abel
Kemungkinan duplikat dari Bagaimana cara kerja URL Shortener?
roottraveller

Jawaban:

224

Tidak, mereka tidak menggunakan file. Ketika Anda mengklik tautan seperti itu, permintaan HTTP dikirim ke server mereka dengan URL lengkap, seperti http://bit.ly/duSk8wK (tautan ke pertanyaan ini). Mereka membaca bagian jalur (di sini duSk8wK), yang memetakan ke database mereka. Di database, mereka menemukan deskripsi (terkadang), nama Anda (terkadang), dan URL asli. Kemudian mereka mengeluarkan pengalihan, yang merupakan respons HTTP 302 dan URL target di header.

Pengalihan langsung ini penting. Jika Anda menggunakan file atau memuat HTML terlebih dahulu lalu mengarahkan ulang, browser akan menambahkan TinyUrl ke histori, yang bukan itu yang Anda inginkan. Selain itu, situs yang dialihkan akan melihat pengarah (situs asal Anda) sebagai situs tempat tautan TinyUrl berada (yaitu, twitter.com, situs Anda sendiri, di mana pun tautannya). Ini sama pentingnya, sehingga pemilik situs dapat melihat dari mana orang-orang berasal. Ini juga, tidak akan berfungsi jika halaman yang memuat pengalihan.

PS: ada lebih banyak jenis pengalihan. HTTP 301 artinya: redirect permanen. Jika itu terjadi, browser tidak akan meminta situs bit.ly atau TinyUrl lagi dan situs-situs tersebut ingin menghitung klik. Itulah mengapa HTTP 302 digunakan, yang merupakan pengalihan sementara. Browser akan meminta TinyUrl.com atau bit.ly setiap kali lagi, yang memungkinkan untuk menghitung hit untuk Anda (beberapa layanan url kecil menawarkan ini).

Abel
sumber
2
Sebenarnya saya pikir, Bit.ly menggunakan HTTP 301, bukan 302 (yang terakhir saya dengar)
Kenny Cason
1
Karena bit.ly tidak akan membiarkan Anda mengubah ke mana salah satu URL mereka menunjuk, 301 masuk akal. Tidak perlu mengingat versi bit.ly dan memeriksanya kembali.
Joost Schuur
11
@KennyCason / @Joost Schuur: ini memang HTTP 301 yang digunakan, dengan stempel waktu. Ini mengubahnya menjadi Movedbukan Moved Permanently. Ini adalah perbedaan yang halus. Dengan menambahkan stempel waktu, browser menganggapnya harus memeriksa apakah sumber daya berubah atau tidak saat waktu tunggu ini tercapai. Lainnya, seperti is.gd, menggunakan normal 301 Moved Permanentlydan browser tidak perlu memeriksa ulang (tetapi sering kali). Terakhir, layanan seperti url4.eu tidak mengalihkan sama sekali, tetapi menampilkan iklan terlebih dahulu. Dengan 301 layanan masih dapat menghitung pengunjung unik , tetapi tidak semua klik.
Abel
6
Contoh URL bitly sekarang menjadi yang asli dan sebenarnya mengarahkan kembali ke pertanyaan ini ;-) Lihat bitly.com/duSk8wK+ untuk halaman info.
Ronald
1
@Costa: ada banyak cara untuk menghitung klik, ada kemungkinan ia melacak ID kartu jaringan Anda, yang merupakan cara untuk melacak apakah permintaan datang dari komputer yang sama. Dimungkinkan untuk memalsukan atau mengubah ID itu, itu tidak mudah. Selain itu, mungkin saja ia melacak atau menggunakan cookie pihak ketiga yang telah ditetapkan sebelumnya dan untuk pengguna yang sama di browser yang berbeda, yang dapat Anda periksa dengan menghapus semua data sesi dan menggunakan browser anonim.
Abel
110

Orang lain telah menjawab cara kerja pengalihan, tetapi Anda juga harus tahu bagaimana mereka menghasilkan url kecil mereka. Anda akan keliru mendengar bahwa mereka membuat hash dari URL untuk menghasilkan kode unik untuk URL yang dipersingkat. Ini tidak benar dalam banyak kasus, mereka tidak menggunakan algoritme hashing (di mana Anda berpotensi mengalami benturan).

Sebagian besar layanan pemendekan URL yang populer cukup mengambil ID dalam database URL dan kemudian mengubahnya menjadi Base 36 [a-z0-9] (case insensitive) atau Base 62 (case sensitive).

Contoh sederhana dari Tabel Database 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

Kerangka Web yang memungkinkan perutean fleksibel membuat penanganan URL masuk menjadi sangat mudah (Ruby, ASP.NET MVC, dll).

Jadi, di server web Anda, Anda mungkin memiliki tindakan rute yang terlihat seperti (kode pseudo):

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

Yang merutekan permintaan apa pun yang masuk ke server Anda yang memiliki teks apa pun setelah domain Anda www.mytinyurl.com ke metode terkait Anda, RouteURL. Ini memasok teks yang diteruskan setelah garis miring di URL Anda ke metode itu.

Jadi, katakanlah Anda meminta: www.mytinyurl.com/fif

"fif" kemudian akan diteruskan ke metode Anda, RouteURL (String UrlID). RouteURL kemudian akan mengubah "fif" menjadi base10 yang setara, 20103, dan permintaan database akan dibuat untuk mengarahkan ke URL apa pun yang disimpan di bawah ID 20103 (dalam hal ini, www.digg.com). Anda juga dapat meningkatkan jumlah kunjungan untuk Digg satu per satu sebelum mengarahkan ke URL yang benar.

Ini adalah contoh yang sangat sederhana tetapi Anda harus bisa mendapatkan gambaran umumnya.

A Salcedo
sumber
12
Terima kasih atas penjelasan yang bagus. Jadi apa yang terjadi ketika seseorang mencoba membuat URL pendek untuk URL panjang yang sudah ada? Apakah mereka melakukan pencarian teks lengkap di database? Saya rasa tidak akan memakan banyak waktu. Pendekatan berbasis hash atau message digest terlihat lebih praktis.
Piyush Kansal
@PiyushKansal Anda dapat menggunakan hash secara internal untuk melakukan O(1)pencarian guna menemukan duplikat; dan kemudian arahkan URL kecil yang ada untuk itu, atau dapat memilih untuk membuat yang baru. Sejauh yang saya tahu, goo.glmenggunakan kembali url kecil untuk URL yang sama; coba ini di akhir Anda untuk halaman ini: Apakah Anda mengerti ini >> goo.gl/8gVb8X?
Kingz
Bagaimana mereka menangani parameter url? Misalnya www.digg.com?filter=123
Ronen
7

Sebagai perpanjangan dari jawaban @A Salcedo:

Beberapa layanan pemendekan url (Tinyarro.ws) menjadi ekstrim dengan menggunakan Unicode (UTF-8) untuk menyandikan karakter dalam url yang dipersingkat - yang memungkinkan jumlah situs web yang lebih tinggi sebelum harus menambahkan simbol tambahan. Karena sebagian besar UTF-8 diterima untuk digunakan ( (IRI) RFC 3987 ditangani oleh sebagian besar browser ) yang berpindah dari 62situs per simbol ke ~ 1,112,064.

Sebagai gambaran, seseorang dapat menyandikan 1.2366863e + 12 situs dengan 2 simbol ( 1,112,064*1,112,064) - pada November 2009, tautan yang diperpendek bit.lydiakses 2.1miliaran kali ( Sekitar waktu itu, bit.ly dan TinyURL adalah layanan pemendek URL yang paling banyak digunakan. ) yang ~ 600 kali lebih sedikit daripada yang dapat Anda muat hanya dalam 2 simbol, jadi untuk durasi penuh dari semua layanan pemendekan url, itu harus bertahan minimal 20 tahun lagi hingga menambahkan simbol ketiga.

Matas Vaitkevicius
sumber
5

Dengan kata sederhana, penyingkat URL memetakan urutan karakter yang panjang (asli, url panjang yang jelek) menjadi urutan karakter yang pendek dan apik. Ini tidak lain adalah Hashing, yang paling umum digunakan untuk membuat tabel pencarian, HashMap, Hash md5 untuk tujuan kriptografi, dll.

Untuk memahami proses URL-Shortening, saya telah membuat proyek demo di GitHub dan juga posting blog. Silakan merujuk ke ini dan beri tahu saya jika itu membantu.

Entri Blog: Mempersingkat URL

Anand Joshi
sumber