Jak działa skracacz adresów URL? [Zamknięte]

87

Zastanawiam się, jak działa narzędzie do skracania adresów URL, na przykład jak wyodrębniają tekst z paska adresu i mapują go na poprawny adres URL, a później przekierowują. Jakiego języka programowania używają? Jak utrzymują historię mapowania? W jaki sposób zapewniają niepowtarzalność skróconego adresu URL? W jaki sposób laik może odmapować go bez odwiedzania adresu URL?

prap19
źródło
65
tylko 3 głosy zamykające? no dalej, chce się czegoś nauczyć, zamknij to szybciej !!!
IAdapter,
22
To było dokładnie to pytanie, które zadałem i jestem bardzo rozczarowany, widząc, że jest zamknięte. Nie jest to niejednoznaczne ani niepełne - jest bardzo konkretny w tym, o co pyta.
złodziej pinezek
3
@bmargulies Myślę, że pytanie nie powinno być zamykane, to było bardzo pomocne i nawet odpowiedzi, także pomyśl o 43 głosów za i zdecydowałeś, że zostanie zamknięte ... dlaczego?
Amruth A,

Odpowiedzi:

40

Wiki jest twoim przyjacielem

Zasadniczo witryna o krótszej nazwie jest używana jako symbol zastępczy, na przykład bit.ly.

Następnie bit.ly generuje klucz do podania przez użytkownika, który jest generowany losowo, aby się nie powtarzał. Mając 35 opcji znaków i około 8 wartości, wykonaj obliczenia. To dużo możliwych kluczy. Jeśli adres URL jest równy wcześniej istniejącemu kluczowi, pamiętam, że przeczytałem gdzieś, że oni również ponownie używają kluczy.

Tak naprawdę nie używają określonego języka programowania, po prostu używają prostego przekierowania URL, które, jak sądzę, można zrobić za pomocą HTML.

Daniel G. Wilson
źródło
och, to jest super. Dziękuję bardzo
prap19
25
Przekierowanie NIE jest wykonywane za pomocą HTML, jest wykonywane za pomocą nagłówków HTTP. (W zależności od kodu stanu 301 lub 302).
Yahel
No dobra, to miałoby więcej sensu. Dziękuję za wyjaśnienie.
Daniel G. Wilson,
Do przekierowania muszą używać nagłówka lokalizacji.
Jeevan Patil,
26

Skracacze adresów URL po prostu generują krótki kod, mapują docelowy adres URL na krótki kod i dostarczają nowy adres URL. Odwiedzenie adresu URL powoduje wyszukanie bazy danych z krótkim kodem jako kluczem i przekierowanie do docelowego adresu URL. Nie ma powiązania algorytmicznego między skróconym adresem URL a docelowym adresem URL, więc nie można go „odmapować” bez przechodzenia przez systemy skracania adresów URL.

Możesz to zrobić za pomocą dowolnego języka programowania i magazynu danych. Generowanie kodu jest również proste, aby zapewnić unikalność; gdybyś miał zwiększający się podstawowy klucz całkowity, mógłbyś po prostu zakodować klucz jako base62 i go obsłużyć. Ponieważ kody mają charakter przyrostowy, nigdy nie będziesz miał konfliktu.

Chris Heald
źródło
19

Proces jest właściwie dość prosty: istnieje skrypt, który pyta o adres URL, generuje losowy ciąg (i sprawdza, czy ten ciąg nie jest już używany) i umieszcza go w jakiejś bazie danych. Kiedy żądasz adresu URL, inny skrypt szuka w bazie danych losowego ciągu, a jeśli zostanie znaleziony, przekierowuje Cię do witryny.

Jest to oczywiście bardziej skomplikowane w produkcji ze względu na potrzebne funkcje, takie jak zapobieganie nadużyciom, filtrowanie adresów URL, zapobieganie spamowi, weryfikacja adresów URL itp. Ale są one dość proste do wdrożenia.


Język jest nieistotny, w większości każdy to zrobi.

TheLQ
źródło
9
"i sprawdza, czy ten ciąg nie jest już używany" .. JAK? To jest największe pytanie
Stewie
3
@Stewie: SELECT * FROM mappings WHERE key = stringToCheck i sprawdź, czy zostały zwrócone jakieś wiersze? Lub cokolwiek podobnego w wybranym języku bazy danych. Szczerze mówiąc, wydaje się to najprostszą częścią całego problemu.
David Liu
@Stewie Lub mogą użyć HashMap do mapowania<key, url>
roottraveller
@DavidLiu Czy nie trzeba by było ponownie generować i wysyłać zapytań, dopóki nie będzie żadnych wyników? Wraz ze wzrostem rozmiaru danych wydłuża się czas sprawdzania. W najgorszym przypadku liczba zapytań do Twojej bazy danych będzie wynosić n-1, gdzie n to liczba „łańcuchów”; co się dzieje, gdy masz strun 100M?
Stewie
@Stewie To zupełnie inna kwestia, problem z zasadą samego rozwiązania. Masz rację, że problem regeneracji w końcu stałby się problemem, ale znowu, dlatego powiedziałem, że „weryfikacja łańcucha nie jest już używana” jest łatwą częścią rozwiązania. Istnieje wiele alternatywnych rozwiązań do wykonania losowego bez wymiany.
David Liu