Bagaimana cara kerja URL Shortener? [Tutup]

90

Saya ingin tahu bagaimana URL Shortener bekerja, seperti bagaimana mereka mengekstrak teks dari bilah alamat dan memetakannya ke URL yang benar, kemudian mengarahkannya kembali. Bahasa pemrograman apa yang mereka gunakan? Bagaimana mereka mempertahankan sejarah pemetaan? Bagaimana cara memastikan keunikan url yang dipersingkat? Bagaimana orang awam dapat membuka peta tanpa mengunjungi URL?

prap19
sumber
68
hanya 3 suara yang dekat? ayolah, dia ingin belajar sesuatu, tutup lebih cepat !!!
IAdapter
24
Ini adalah pertanyaan tepat yang saya miliki dan saya sangat kecewa melihat pertanyaan itu ditutup. Itu tidak ambigu atau tidak lengkap - dia sangat spesifik dalam apa yang dia minta.
Thumbtackthief
4
@bmargulies Saya pikir pertanyaan tidak boleh ditutup, ini sangat membantu dan bahkan menjawab, juga pikirkan 43 suara positif dan Anda memutuskan untuk ditutup .. mengapa ??
Amruth A

Jawaban:

40

Wiki Adalah Teman Anda

Pada dasarnya, situs web dengan nama yang lebih pendek digunakan sebagai placeholder, seperti bit.ly.

Kemudian, bit.ly membuat kunci untuk disediakan oleh pengguna, yang dibuat secara acak agar tidak berulang. Dengan 35 opsi karakter dan 8 atau lebih nilai, lakukan penghitungan. Itu banyak sekali kemungkinan kunci. Jika url sama dengan kunci yang ada sebelumnya, saya ingat pernah membaca di suatu tempat bahwa mereka juga menggunakan kembali kunci.

Mereka tidak benar-benar menggunakan bahasa pemrograman tertentu, mereka hanya menggunakan pengalihan URL sederhana, yang dapat dilakukan dengan HTML saya percaya.

Daniel G. Wilson
sumber
oh itu keren. Terima kasih banyak
prap19
25
Pengalihan TIDAK dilakukan dengan HTML, ini dilakukan dengan HTTP Headers. (Kode status 301 atau 302, tergantung).
Yahel
Ah oke, itu akan lebih masuk akal. Terimakasih atas klarifikasinya.
Daniel G. Wilson
Mereka harus menggunakan tajuk Lokasi untuk mengalihkan.
Jeevan Patil
26

Penyingkat URL hanya menghasilkan kode pendek, memetakan URL target ke kode pendek, dan memberikan URL baru. Mengunjungi URL melakukan pencarian database dengan kode pendek sebagai kunci, dan mengarahkan Anda ke URL target. Tidak ada asosiasi algoritmik antara URL yang dipersingkat dan URL tujuan, jadi Anda tidak dapat "membatalkan pemetaan" tanpa melalui sistem penyingkat URL.

Anda dapat melakukannya dengan bahasa pemrograman dan penyimpanan data apa pun. Pembuatan kode itu sepele untuk memastikan keunikan juga; jika Anda memiliki kunci integer primer yang bertambah, Anda cukup mengenkode kunci sebagai base62 dan menyajikannya. Karena kode bersifat inkremental, Anda tidak akan pernah mengalami konflik.

Chris Heald
sumber
19

Prosesnya sebenarnya cukup sederhana: Ada skrip yang menanyakan URL, menghasilkan string acak (dan memverifikasi bahwa string ini belum digunakan), dan menempatkan keduanya di semacam database. Ketika Anda meminta url, skrip lain mencari di database untuk string acak, dan jika ditemukan mengarahkan Anda ke situs.

Ini tentu saja lebih rumit dalam produksi karena fitur-fitur yang dibutuhkan seperti pencegahan penyalahgunaan, pemfilteran URL, pencegahan spam, verifikasi URL, dll. Tetapi itu cukup sederhana untuk diterapkan.


Bahasanya tidak relevan, kebanyakan orang akan melakukannya.

TheLQ
sumber
9
"dan memverifikasi bahwa string ini belum digunakan" .. BAGAIMANA? Ini adalah pertanyaan terbesar
Stewie
4
@Stewie: SELECT * FROM mappings WHERE key = stringToCheck, dan periksa apakah ada baris yang dikembalikan? Atau hal serupa dalam bahasa pilihan database Anda. Sepertinya bagian paling sederhana dari keseluruhan masalah jujur.
David Liu
@Stewie Atau mereka dapat menggunakan HashMap untuk memetakan<key, url>
roottraveller
@DavidLiu Tidakkah seseorang perlu terus membuat ulang dan mengeluarkan kueri sampai tidak ada hasil? Seiring bertambahnya ukuran data Anda, waktu untuk memeriksa bertambah. Dalam skenario kasus terburuk, jumlah query ke DB Anda akan menjadi n-1 dimana n adalah jumlah "string"; apa yang terjadi jika Anda memiliki 100 juta string?
Stewie
@Stewie Itu pertanyaan yang sama sekali berbeda, masalah dengan prinsip solusi itu sendiri. Anda benar bahwa masalah regenerasi pada akhirnya akan menjadi masalah, tetapi sekali lagi, itulah mengapa saya mengatakan "memverifikasi string belum digunakan" adalah bagian solusi yang mudah. Ada banyak alternatif solusi untuk melakukan random tanpa penggantian.
David Liu