Co masz na myśli, mówiąc o skracaniu adresów URL?
Istnieją różne techniki. Większość witryn internetowych, AFAIK, używa tej techniki, aby umieścić klucz podstawowy bazy danych (być może w jakiejś zakodowanej) w adresie URL w miejscu, w którym można go parsować za pomocą wyrażenia regularnego, a po prostu poprawiając pozostałe za pomocą słów kluczowych.
Przykład z Amazon: http://www.amazon.de/Bauknecht-WA-PLUS-614-Waschmaschine/dp/B003V1JDU8/
Można wprowadzić coś w miejsce nazwy produktu, tylko identyfikator na końcu jest ważna.
Możesz jednak zachować czyste łącza i sprawdzić, czy są poprawne, i wykonać 301 przekierowanie na rzeczywisty URL lub umieścić kanoniczny adres URL, jeśli pojawi się zły adres URL.
Jednakże:
Jeśli chcesz zrobić coś takiego TinyURL, moja odpowiedź brzmi: zdecydowanie nie.
To nie wystarczy.
To zależy.
To nie jest "bezpieczne". Łatwo odgadnąć adresy URL. Lepszym rozwiązaniem byłoby użycie funkcji kryptograficznych, takich jak SHA-1/MD5.
Jeśli chodzi o kolizje, nie mogę powiedzieć. Identyfikator GUID został zaprojektowany, aby nie powodować kolizji, ale używasz tylko pierwszych 6 znaków. Nie wiem, co dokładnie reprezentują w algorytmie. Ale zdecydowanie nie jest optymalna.
Dlaczego po prostu nie używasz automatycznego przyrostu klucza bazy danych? Jeśli bezpieczeństwo jest ważne, z pewnością skorzystasz z więcej niż 6 znaków.
nad projektem robiłam kiedyś coś takiego
/bazy danych klucza podstawowego/hash-of-primary-key-z-jakiś-token-lub-client-informacje/
ten sposób Mogłem bezpośrednio wyszukać klucz podstawowy w bazie danych, który był najszybszy z możliwych sposobów, ale także zweryfikować, czy link nie został znaleziony przez brutalny wymuszony przez skrót. W moim przypadku hasz był sumą SHA-1 tajnego tokenu klienta i kluczem podstawowym.
Z ciekawości, po co zawracać sobie głowę UUID? Dlaczego nie na przykład po prostu wygenerować 5 lub więcej bajtów z instancji losowej? –
Zacząłem od losowego/System.nanoTime/adresu mac mac ', a następnie zdałem sobie sprawę, że uuid ma wszystkie z nich :-) – Bozho
@Bozho możesz rozważyć [kodowanie Base32 aka kodowania Crockford] (http: //www.crockford .com/wrmg/base32.html), ponieważ ma kilka zalet, takich jak usuwanie potencjalnie niejednoznacznych znaków, takich jak 0 i litera L. Otrzymasz dłuższy krótki URL, ale jeśli nie masz miliardów, to może warto. –