Kısa URL hizmetleri nasıl çalışır?


105

Nasıl gibi hizmetleri yapmak TinyURL veya Metamark işin?
Küçük URL anahtarını, orijinal URL'ye yalnızca bir "HTTP yeniden yönlendirmesi" sağlayan [sanal?] Bir web sayfasıyla mı ilişkilendirirler? yoksa daha fazla "büyü" mü var?

[orijinal ifade] TinyURL, Metamark ve diğerleri gibi URL kısaltma hizmetlerini sıklıkla kullanıyorum, ancak her kullandığımda bu hizmetlerin nasıl çalıştığını merak ediyorum. Başka bir sayfaya yönlendirecek yeni bir dosya mı oluşturuyorlar yoksa alt alan adları mı kullanıyorlar?


1
[Non-] soruyu yeniden ifade etmek gerekirse: "TinyURL gibi hizmetler nasıl çalışır? Küçük URL anahtarını yalnızca orijinal URL'ye" HTTP yönlendirmesi "sağlayan bir [sanal?] Web sayfasıyla mı ilişkilendirirler? soruyor musunuz?
mjv

1
Kısaltılmış URL'lerin süresi hiç doluyor mu? (bu URL'ler için yani veritabanı girdileri sunucularından kaldırılır)
THD

2
@thd: evet, ancak (günlük) isabetlere ve kısa url servis sağlayıcısının politikasına bağlı olabilir. Ayrıca süresinin dolmasına izin vermeyebilirler, bazıları bunun için üyelik ister.
Abel

Yanıtlar:


224

Hayır, dosya kullanmıyorlar. Bunun gibi bir bağlantıya tıkladığınızda, sunucularına http://bit.ly/duSk8wK gibi tam URL ile bir HTTP isteği gönderilir (bu soruya bağlantılar). duSk8wKVeritabanlarıyla eşleşen yol bölümünü (burada ) okurlar . Veritabanında bir açıklama (bazen), adınızı (bazen) ve gerçek URL'yi bulurlar. Ardından, bir HTTP 302 yanıtı ve başlıktaki hedef URL olan bir yönlendirme yayınlarlar.

Bu doğrudan yönlendirme önemlidir. Dosyaları kullanacak olsaydınız veya önce HTML'yi yükleyip sonra yeniden yönlendirecekseniz, tarayıcı TinyUrl'yi geçmişe ekler, ki bu sizin istediğiniz şey değildir. Ayrıca, yönlendirilen site, yönlendireni (ilk geldiğiniz site) TinyUrl bağlantısının bulunduğu site olarak (yani twitter.com, bağlantı nerede olursa olsun kendi siteniz) görecektir. Bu, site sahiplerinin insanların nereden geldiğini görebilmeleri için de aynı derecede önemlidir. Bu da, yönlendirmeler yapan bir sayfa yüklenirse işe yaramaz.

Not: daha fazla yönlendirme türü vardır. HTTP 301 şu anlama gelir: kalıcı yönlendirme. Bu olursa, tarayıcı artık bit.ly veya TinyUrl sitesini istemeyecek ve bu siteler isabetleri saymak isteyecektir. Bu nedenle, geçici bir yönlendirme olan HTTP 302 kullanılır. Tarayıcı, TinyUrl.com veya bit.ly'ye her seferinde tekrar soracaktır, bu da sizin için isabetlerin sayılmasını mümkün kılar (bazı küçük url hizmetleri bunu sunar).


2
Aslında Bit.ly'nin 302 yerine HTTP 301 kullandığını düşünüyorum (en son duyduğum)
Kenny Cason

1
Bit.ly, URL'lerinden birinin gösterdiği yeri değiştirmenize izin vermediğinden, 301 mantıklı. Bit.ly sürümünü hatırlamanıza ve yeniden kontrol etmenize gerek yok.
Joost Schuur

11
@KennyCason / @Joost Schuur: Gerçekten de bir zaman damgası ile kullanılan HTTP 301. Bu haline döner Moveddeğil Moved Permanently. Bu ince bir farktır. Tarayıcı, zaman damgasını ekleyerek, bu zaman aşımına ulaştığında kaynağın değiştirilip değiştirilmediğini kontrol etmesi gerektiğini düşünür. İs.gd gibi diğerleri normal kullanır 301 Moved Permanentlyve tarayıcının yeniden kontrol etmesi gerekmez (ama çoğu zaman olacaktır). Son olarak, url4.eu gibi hizmetler hiç yönlendirme yapmaz, ancak önce size bir reklam gösterir. 301 ile hizmetler yine de benzersiz ziyaretçileri sayabilir , ancak tüm isabetleri saymaz .
Abel

6
Örnek bitly URL artık gerçek ve aslında bu soruya geri yönlendiriyor ;-) Bilgi sayfası için bitly.com/duSk8wK + 'ya bakın .
Ronald

1
@Costa: Tıklamaları saymanın birçok yolu vardır, aynı bilgisayardan bir isteğin gelip gelmediğini takip etmenin bir yolu olan ağ kartı kimliğinizi takip etmesi mümkündür. Bu kimliği taklit etmek veya değiştirmek mümkündür, kusursuz değildir. Ayrıca, tüm oturum verilerini temizleyerek ve anonim bir tarayıcı kullanarak kontrol edebileceğiniz, daha önce ve farklı tarayıcılarda aynı kullanıcıya ayarlanmış üçüncü taraf çerezlerini izlemesi veya kullanması mümkündür.
Abel

110

Diğerleri yönlendirmelerin nasıl çalıştığını yanıtladı, ancak küçük URL'lerini nasıl oluşturduklarını da bilmelisiniz. Kısaltılmış URL için bu benzersiz kodu oluşturmak amacıyla yanlışlıkla URL'nin bir karmasını oluşturduklarını duyacaksınız. Bu çoğu durumda yanlıştır, bir karma algoritma kullanmazlar (potansiyel olarak çarpışmalar yaşayabileceğiniz yerlerde).

Popüler URL kısaltma hizmetlerinin çoğu, URL'nin veritabanındaki kimliği alır ve ardından bunu Base 36 [a-z0-9] (büyük / küçük harf duyarlı) veya Base 62'ye (büyük / küçük harfe duyarlı) dönüştürür.

TinyURL Veritabanı Tablosunun basitleştirilmiş bir örneği:

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

Esnek yönlendirmeye izin veren Web Çerçeveleri, gelen URL'leri (Ruby, ASP.NET MVC, vb.) İşlemeyi gerçekten kolaylaştırır.

Dolayısıyla, web sunucunuzda şuna benzeyen bir rota eyleminiz olabilir (sözde kod):

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

Www.mytinyurl.com etki alanınızdan sonra herhangi bir metin içeren herhangi bir gelen isteği, ilişkili yönteminiz olan RouteURL'ye yönlendirir. URL'nizdeki eğik çizgiden sonra iletilen metni bu yönteme sağlar.

Diyelim ki talep ettiniz: www.mytinyurl.com/fif

Daha sonra "beş", yönteminiz olan RouteURL'ye (Dize UrlID) geçirilir. RouteURL daha sonra "beş" i, 20103 baz 10 eşdeğerine dönüştürür ve 20103 kimliği altında depolanan URL'ye (bu durumda www.digg.com) yeniden yönlendirme için bir veritabanı isteği yapılır. Doğru URL'ye yönlendirmeden önce Digg için ziyaret sayısını da bir artırabilirsiniz.

Bu gerçekten basitleştirilmiş bir örnek ama genel fikri alabilmelisiniz.


12
Güzel açıklama için teşekkürler. Öyleyse birisi zaten var olan uzun bir URL için kısa bir URL oluşturmaya çalıştığında ne olur? Veritabanında tam metin araması yapıyorlar mı? Çok fazla zaman alacağını düşünmüyorum. Hash veya mesaj özeti tabanlı yaklaşım daha pratik görünüyor.
Piyush Kansal

@PiyushKansal, hash'i dahili olarak O(1)kopyaları bulmak için arama yapmak için kullanabilirsiniz; ve sonra mevcut küçük URL'yi bunun için yönlendirin veya yeni bir tane oluşturmayı seçebilirsiniz. Anlayabildiğim kadarıyla goo.glaynı URL için küçük url'leri yeniden kullanıyor; bu sayfa için sonunda bunu deneyin: Bunu anladınız goo.gl/8gVb8Xmı >> ?
Kingz

URL parametrelerini nasıl işlerler? Örneğin www.digg.com?filter=123
Ronen

7

@A Salcedo cevabının bir uzantısı olarak:

Bazı url kısaltma hizmetleri (Tinyarro.ws), kısaltılmış url'deki karakterleri kodlamak için Unicode (UTF-8) kullanarak aşırıya kaçar - bu da ek sembol eklemeden önce daha fazla web sitesine izin verir. UTF-8'in çoğu kullanım için kabul edildiğinden ( (IRI) RFC 3987, çoğu tarayıcı tarafından işlenir ), 62sembol başına sitelerden ~ şeklinde çıkıntı yapar 1,112,064.

Perspektif koymak gerekirse 1.2366863e + 12 siteyi 2 sembolle ( 1,112,064*1,112,064) kodlayabiliriz - Kasım 2009'da, kısaltılmış bağlantılara milyarlarca kez bit.lyerişildi 2.1( O zamanlar, bit.ly ve TinyURL en yaygın kullanılan URL kısaltma hizmetleriydi. ) Bu, sadece 2 sembole sığabileceğinden ~ 600 kat daha azdır, bu nedenle tüm url kısaltma servislerinin varlığının tam süresi için üçüncü sembol eklenene kadar minimum 20 yıl daha dayanmalıdır.


5

Basit bir deyişle, URL kısaltıcı rastgele bir uzun karakter dizisini (orijinal, uzun berbat url) kısa ve kaygan bir karakter dizisine eşler. Bu, en yaygın olarak arama tabloları, HashMap, md5 Hash, kriptografik amaçlar için vb. Oluşturmak için kullanılan Hashing'den başka bir şey değildir.

URL Kısaltma sürecini anlamak için GitHub'da bir demo projesi ve ayrıca bir blog yazısı oluşturdum. Buna bakın ve yardımcı olup olmadığını bana bildirin.

Blog Gönderisi : URL Kısaltma

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.