Короткие URL-адреса в настоящее время очень популярны, и существует довольно много веб-сайтов, которые предоставляют услуги коротких URL-адресов.Короткие URL-адреса широко используются на Weibo, потому что Weibo имеет ограничение на длину URL-адресов, поэтому используется очень короткий URL-адрес. Преобразование длинного URL-адреса в короткий URL-адрес — отличная идея, и она имеет много преимуществ, таких как меньшее количество символов, красивый внешний вид и простота публикации и распространения.
Объяснение принципа короткого URL
Здесь мы возьмем сервис коротких URL-адресов Baidu в качестве примера для иллюстрации. https://dwz.cn/XrxeqVqy Этот URL-адрес является результатом укороченной домашней страницы моего сайта. Конкретные шаги заключаются в следующем:
- Введите короткий URL-адрес в адресную строку браузера или щелкните короткий URL-адрес в браузере.
- Выполните разрешение DNS, получите IP-адрес dwz.cn, а затем отправьте запрос на получение по адресу.Проще говоря, он фактически запрашивает URL-адрес.
- Сервер получаетXrxeqVqy, в соответствии с этим коротким кодом, чтобы получить соответствующий длинный URL-адрес
- перенаправить на этот длинный URL.
Перенаправление может быть перенаправлением 301 или перенаправлением 302. Разница в том, что первое является постоянным перенаправлением, а второе — временным перенаправлением. В общем, после создания короткого URL-адреса он не изменится, поэтому используется перенаправление 301. Он будет быть лучше и может снизить нагрузку на сервер. Текущая предпосылка заключается в том, что вам не нужно считать количество переходов по ссылке или другую информацию, если вам нужно считать, то вы можете использовать перенаправление 302.
Как сократить URL-адреса
Сократить URL-адрес фактически означает использовать определенный алгоритм для обработки длинного URL-адреса, а затем получить уникальный короткий код, который находится во взаимно однозначном соответствии и не может повторяться, а затем короткий код В это время запросите соответствующий длинный URL-адрес и перенаправьте его.
Обычно используются два алгоритма:Метод самоинкрементного идентификатораиАлгоритм дайджеста.
Метод самоинкрементного идентификатора
Метод самоинкрементного идентификатора также называется никогда не повторяющимся методом, который реализуется с использованием принципа генератора чисел.Каждому URL соответствует число, а затем самоинкременты, которые можно понимать как идентификатор, а затем идентификатор преобразуется соответствующим образом (например, базовое преобразование), поскольку идентификатор уникален, преобразованный результат также уникален. Длина короткого URL-адреса обычно составляет 6 цифр, и каждая цифра состоит из 62 букв [a–z, A–Z, 0–9]. of 62^6 ~= 568 В основном достаточно сотен миллионов комбинаций.
После того, как теория закончена, давайте посмотрим на конкретные шаги алгоритма реализации:
Во-первых, получить длинный URL-адрес, вычислить длинный URL-адрес в значение md5 и определить, есть ли в библиотеке короткий код, соответствующий значению md5 (этой библиотекой может быть redis или mysql для получения noSql и других баз данных), если да , верните его напрямую, если нет, верните его на url, md5 хранятся в базе данных,И вернуть значение идентификатора записи, это значение идентификатора используется в качестве основы для создания короткой цепочки. Причина, по которой здесь URL-адрес преобразуется в md5, заключается в том, что длинный URL-адрес может быть длинной строкой, а запрос в базу данных занимает очень много времени, особенно в качестве значения ключа redis, что нежелательно.
Затем преобразуйте возвращенный идентификатор в шестнадцатеричный и используйте одну из букв или цифр в качестве соединителя.Здесь мы используем строчную букву a, а затем объединяем ее в преобразованную шестнадцатеричную строку, используем случайный, если она меньше шести цифр.Символы дополняются, и символ соединителя должен быть удален из случайных символов соответственно, чтобы гарантировать уникальность шестизначного короткого кода.
Короткий код сгенерирован, просто верните его напрямую. После этого введите короткий код для перенаправления, мы можем запросить длинный URL-адрес, соответствующий короткому коду в библиотеке, а затем перенаправить на длинный URL-адрес.
Блок-схема выглядит следующим образом
Здесь я опубликую алгоритм генерации коротких кодов, пример кода принимаетnodejs, другая бизнес-логика легко реализуема, поэтому я не буду ее здесь выкладывать:
function EncodeStr(number) {
if(!parseInt(number)){
let codemsg = "请传入数字类型";
return {
success:false,
msg:codemsg
}
}
let randomInsertStr = 'a';
var chars = '0123456789bcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ'.split(''),
radix = chars.length,
qutient = +number,
arr = [];
do {
mod = qutient % radix;
qutient = (qutient - mod) / radix;
arr.unshift(chars[mod]);
} while (qutient);
let codeStr = arr.join('');
codeStr = codeStr.length < 6 ? (codeStr+randomInsertStr + randomWord(false,5-codeStr.length,0,[randomInsertStr])):codeStr;
return codeStr;
}
let randomWord = (randomFlag, min, max,ruledOutStr)=>{
var str = "",
range = min,
pos='',
arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
if(ruledOutStr){
ruledOutStr.map(item=>{
arr = arr.join("").split(item).join('').split('')
})
}
// 随机产生
if(randomFlag){
range = Math.round(Math.random() * (max-min)) + min;
}
for(var i=0; i<range; i++){
pos = Math.round(Math.random() * (arr.length-1));
str += arr[pos];
}
return str;
};
Алгоритм дайджеста
В алгоритме дайджеста существует вероятность повторения, и вероятность повторения увеличивается по мере его продвижения. Во-первых, давайте поговорим о конкретных идеях: во-первых, сгенерируйте 32-битную строку подписи из длинного URL-адреса md5 и разделите ее на 4 сегмента, каждый сегмент составляет 8 байт, и циклически обработайте эти четыре сегмента, возьмите 8 байт и обработайте это как 16 байт.Системная строка и 0x3ffffffff (30-бит 1) и операция, то есть игнорирование обработки более 30 бит, 30 бит разбиты на 6 сегментов, каждое 5-значное число используется как индекс алфавита для получения определенного символа, а в свою очередь получается 6-битная строка. Общая строка md5 может содержать 4 6-битных строки, и любая из них может использоваться как короткий URL-адрес этого длинного URL-адреса. Запросите, существует ли короткий URL-адрес в библиотеке. Если он существует, запустите его снова. Если он не существует, вы можете сохранить его напрямую.
Если что-то не так, поправьте меня