Bir URL Kısaltıcı nasıl çalışır? [kapalı]


90

Bir URL Kısaltıcının nasıl çalıştığını merak ediyorum, örneğin metni adres çubuğundan nasıl çıkardıkları ve doğru URL ile eşledikleri, daha sonra yeniden yönlendirdikleri gibi. Hangi programlama dilini kullanıyorlar? Haritalamanın geçmişini nasıl koruyorlar? Kısaltılmış URL'nin benzersizliğini nasıl sağlarlar? Bir adam URL'yi ziyaret etmeden haritayı nasıl kaldırabilir?


68
sadece 3 yakın oy mu? hadi, bir şeyler öğrenmek istiyor, daha hızlı kapat !!!
IAdapter

24
Bu tam olarak sorduğum soruydu ve kapandığını görmek beni çok hayal kırıklığına uğrattı. Belirsiz ya da eksik değil - ne istediği konusunda çok spesifik.
parmak hırsızı

4
@bmargulies Sorunun kapatılmaması gerektiğini düşünüyorum, bu çok yardımcı oldu ve hatta cevaplar, ayrıca 43 olumlu oy da düşünüyorum ve kapatılmasına karar verdiniz ... neden ??
Amruth A

Yanıtlar:


40

Wiki Senin Arkadaşın

Temel olarak, daha kısa bir ada sahip bir web sitesi, bit.ly gibi bir yer tutucu olarak kullanılır.

Daha sonra, bit.ly, tekrar etmemek için rasgele üretilen bir anahtar üretir. 35 karakter seçeneği ve 8 ya da daha fazla değerle matematik yapın. Bu çok fazla olası anahtar. Bir url önceden var olan bir anahtara eşitse, bir yerde anahtarları da yeniden kullandıklarını okuduğumu hatırlıyorum.

Gerçekten belirli bir programlama dili kullanmıyorlar, sadece basit bir URL yeniden yönlendirmesi kullanıyorlar ki bu HTML ile yapılabilir sanırım.


oh bu harika. Çok teşekkür ederim
prap19

25
Yönlendirme HTML ile YAPILMAZ, HTTP Başlıkları ile yapılır. (Durum kodu 301 veya 302, bağlı olarak).
Yahel

Ah tamam, bu daha mantıklı. Açıklama için teşekkürler.
Daniel G. Wilson

Yönlendirme için Konum başlığını kullanıyor olmaları gerekir.
Jeevan Patil

26

URL kısaltıcılar yalnızca bir kısa kod oluşturur, hedef URL'yi kısa kodla eşler ve yeni bir URL sağlar. URL'yi ziyaret etmek, anahtar olarak kısa kod ile bir veritabanı araması gerçekleştirir ve sizi hedef URL'ye yönlendirir. Kısaltılmış bir URL ile hedef URL arasında algoritmik bir ilişki yoktur, bu nedenle URL kısaltıcının sistemlerinden geçmeden onu "eşleştiremezsiniz".

Bunu herhangi bir programlama dili ve veri deposu ile yapabilirsiniz. Benzersizliği sağlamak için kod üretimi önemsizdir; Eğer artan bir birincil tamsayı anahtarınız varsa, anahtarı base62 olarak kodlayabilir ve ona hizmet edebilirsiniz. Kodlar doğası gereği artımlı olduğundan, asla bir çatışmanız olmayacak.


19

İşlem aslında oldukça basittir: URL'yi isteyen, rastgele bir dize oluşturan (ve bu dizenin zaten kullanılmadığını doğrulayan) ve ikisini bir tür veritabanına koyan bir komut dosyası var. Bir url talep ettiğinizde, rastgele dizeyi veritabanında başka bir komut dosyası arar ve bulunursa sizi siteye yönlendirir.

Kötüye kullanımı önleme, URL filtreleme, spam önleme, URL doğrulama, vb. Gibi gerekli özellikler nedeniyle bu, üretimde elbette daha karmaşıktır. Ancak bunların uygulanması oldukça basittir.


Dil alakasız, çoğunlukla herhangi biri yapacak.


9
"ve bu dizenin daha önce kullanılmadığını doğrular" .. NASIL? Bu en büyük soru
Stewie

4
@Stewie: SELECT * eşleştirmelerden NEREDE key = stringToCheck ve herhangi bir satırın dönüp dönmediğini kontrol et? Veya tercih ettiğiniz veritabanı dilinde benzer herhangi bir şey. Dürüst olmak gerekirse, tüm sorunun en basit kısmı gibi görünüyor.
David Liu

@Stewie Veya haritalamak için bir HashMap kullanabilirler<key, url>
roottraveller

@DavidLiu Herhangi bir sonuç çıkmayana kadar sorguları yeniden oluşturmaya ve göndermeye devam etmek gerekmez mi? Veri boyutunuz büyüdükçe, kontrol etme süresi de artar. En kötü senaryoda, DB'nize yapılan sorgu sayısı n-1 olacaktır; burada n, "dizelerin" sayısıdır; 100 milyon dizeye sahip olduğunuzda ne olur?
Stewie

@Stewie Bu tamamen farklı bir soru, çözümün ilkesiyle ilgili bir sorun. Yenileme sorununun eninde sonunda bir sorun haline geleceği konusunda haklısınız, ancak yine, bu yüzden "dizginin halihazırda kullanılmadığını doğrulamanın" çözümün kolay kısmı olduğunu söyledim. Değiştirmeden rastgele yapmak için birçok alternatif çözüm var.
David Liu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.