Как работает сокращение URL? [закрыто]

87

Интересно, как работает сокращение URL-адресов, например, как они извлекают текст из адресной строки и сопоставляют его с правильным URL-адресом, а затем перенаправляют его. Какой язык программирования они используют? Как они ведут историю картографии? Как они обеспечивают уникальность сокращенного URL? Как непрофессионал может отключить его, не посещая URL-адрес?

prap19
источник
65
всего 3 близких голоса? давай, он хочет чему-то научиться, закрой быстрее !!!
IAdapter 01
22
Это был именно тот вопрос, который у меня был, и я очень разочарован, увидев, что он закрыт. Это не двусмысленно или неполно - он очень конкретен в том, о чем спрашивает.
thumbtackthief
3
@bmargulies Я думаю, что вопрос не следует закрывать, это было очень полезно и даже ответы, также думаю, что 43 голоса за и вы решили его закрыть .. почему ??
Амрут А.

Ответы:

40

Вики - твой друг

Обычно в качестве заполнителя используется веб-сайт с более коротким названием, например bit.ly.

Затем bit.ly генерирует для пользователя ключ, который генерируется случайным образом, чтобы не повторяться. С 35 вариантами символов и 8 или около того значениями произведите вычисления. Это много возможных ключей. Если URL-адрес равен ранее существовавшему ключу, я помню, как где-то читал, что они также повторно используют ключи.

На самом деле они не используют конкретный язык программирования, они просто используют простое перенаправление URL-адресов, которое, как мне кажется, можно сделать с помощью HTML.

Дэниел Г. Уилсон
источник
ох, это круто. Большое спасибо
prap19 01
25
Перенаправление НЕ выполняется с помощью HTML, оно выполняется с помощью заголовков HTTP. (Код состояния 301 или 302, в зависимости).
Yahel
Ладно, в этом было бы больше смысла. Благодарю за разъяснение.
Дэниел Г. Уилсон
Для перенаправления они должны использовать заголовок Location.
Дживан Патил
26

Специалисты по сокращению URL просто генерируют короткий код, сопоставляют целевой URL с коротким кодом и предоставляют новый URL. Посещение URL-адреса выполняет поиск в базе данных с коротким кодом в качестве ключа и перенаправляет вас на целевой URL-адрес. Между сокращенным URL-адресом и целевым URL-адресом не существует алгоритмической ассоциации, поэтому вы не можете "отменить сопоставление" его, не пройдя через системы сокращения URL-адресов.

Вы можете сделать это с любым языком программирования и хранилищем данных. Генерация кода также тривиальна для обеспечения уникальности; если у вас есть увеличивающийся первичный целочисленный ключ, вы можете просто закодировать ключ как base62 и использовать его. Поскольку коды имеют инкрементный характер, у вас никогда не будет конфликта.

Крис Хилд
источник
19

На самом деле процесс довольно прост: там сценарий, который запрашивает URL-адрес, генерирует случайную строку (и проверяет, что эта строка еще не используется) и помещает их в какую-то базу данных. Когда вы запрашиваете URL-адрес, другой сценарий ищет в базе данных случайную строку и, если она найдена, перенаправляет вас на сайт.

Это, конечно, более сложно в производственной среде из-за необходимых функций, таких как предотвращение злоупотреблений, фильтрация URL-адресов, предотвращение спама, проверка URL-адресов и т. Д. Но их довольно просто реализовать.


Язык не имеет значения, в основном подойдет любой.

TheLQ
источник
9
"и проверяет, что эта строка еще не использовалась" .. КАК? Это самый большой вопрос
Стьюи
3
@Stewie: SELECT * FROM mappings WHERE key = stringToCheck и проверить, вернулись ли какие-либо строки? Или что-то подобное на выбранном вами языке базы данных. Честно говоря, это самая простая часть всей проблемы.
Дэвид Лю
@Stewie Или они могут использовать HashMap для сопоставления<key, url>
roottraveller
@DavidLiu Разве не нужно было бы продолжать регенерировать и выдавать запросы, пока он не выдаст никаких результатов? По мере увеличения размера данных время для проверки увеличивается. В худшем случае количество запросов к вашей БД будет n-1, где n - количество «строк»; что происходит, когда у вас 100 миллионов струн?
Stewie
@Stewie Это совсем другой вопрос, проблема с принципом самого решения. Вы правы, что проблема с регенерацией в конечном итоге станет проблемой, но, опять же, именно поэтому я сказал, что «проверка того, что строка еще не используется» - это простая часть решения. Существует множество альтернативных решений, позволяющих выполнять случайную выборку без замены.
Дэвид Лю