URL长链接转短链接在现代社会中是必不可少的技能,这是因为长链接不只难以回忆和共享,还存在一定的安全危险。而短链接经过削减URL长度、进步漂亮性和安全性等长处,使得网站内容的共享和传播变得愈加方便。此外,现代社会中人们越来越多地需求共享各种资源和内容,如新闻、文章、视频等等,而短链接能够经过缩短URL的长度,协助用户更轻松地共享这些内容,并且在交际媒体中更容易被辨认和点击。在企业中,短链接也能够用于品牌宣扬和营销活动,能够进步用户体会,增加点击率和转化率。因而,URL长链接转短链接现已成为现代社会中不可或缺的技能之一。
跟着互联网的快速发展,人们越来越多地需求在网络上共享各种资源和内容。由于长链接不只难以被回忆和共享,还存在一定的安全危险,因而短链接应运而生。URL 缩短技能经过削减 URL 长度、进步漂亮性和安全性等长处,成为了现代社会中广泛运用的一项技能。
而长链生成短链的原理完成,便是传统缩短 URL 的办法,它经过将长链转化为短链的办法,从而提供更好的用户体会,使得用户能够在较短的空间内存储更多的信息。
我将详细探讨 URL 缩短的原理、常用完成办法以及完成过程中需求留意的事项,希望能够为你提醒 URL 缩短的奥妙,处理你在实践中遇到的问题。
一、短链接技能
1. 简介
短链接技能是一种将长 URL 映射为短 URL 的技能。简略来说,便是经过一个简化的算法,将输入的长 URL 转换为一个短 URL 字符串,这个字符串能够依照短 URL 本身的需求进行设计,比方能够运用一定的字符集,并且约束字符串长度。
2. 短链接的长处
短链接技能的首要长处包含:
(1)方便用户操作:短链接长度明显较短,让用户更方便地共享 URL 地址。
(2)更漂亮的外观:短链接不只方便共享,并且看起来更简练、漂亮,更合适用于交际媒体共享等场景。
(3)进步安全性:一旦一个长链接被缩短后,拜访者无法经过 URL 字符串中的信息推断出原始 URL 的结构。这进步了 URL 拜访的安全性,使其难以被猜测或恶意运用。
3. 短链接的完成办法
短链接的完成办法有很多种,包含:
(1)Hash 算法:将长链接经过 Hash 函数计算得到一个固定长度的值,然后将这个值转换成一个字符串即为短链接。常用的 Hash 算法有 MD5 和 SHA-1 等。
(2)自增ID法:这种办法是取一个自增的 ID 值,将其转为 62 进制表明,并且保存一张映射表,将短链接和长链接进行映射。
(3)图编码法:将长链接对应的二维码图片编码成字符串办法的短链接。这种办法能够很好地处理短链接长度问题。
4. 短链接的运用场景
短链接首要运用于以下场景:
(1)在线广告:短链接能够进步点击率,一起统计用户的点击行为,使得广告主能够更好地了解广告效果。
(2)交际媒体:经过短链接,用户能够方便地共享信息到交际媒体上,尤其是在 Twitter、微博等约束字符数的渠道上。
(3)电商渠道:短链接能够作为电商渠道的推行东西,使得推行信息更容易被用户拜访和共享。
二、长链转短链计划
1. 短链接生成原理
在完成 URL 缩短之前,需求先了解 URL 缩短的原理。目前常用的 URL 缩短原理首要有:
(1)Hash 算法
Hash 算法是一种将恣意长度的文本映射成固定长度散列值的算法,且散列值的输出具有唯一性。因而,想要再依据散列值复原出原始数据是不可能的。
选用 Hash 算法完成 URL 缩短,首先需求计算出 URL 的 Hash 值,然后将 Hash 值转换为指定字符集的字符串,这个字符串便是短链接。
常见的 Hash 算法有:MD5、SHA1、SHA256 等。可是,Hash 算法虽然能够生成唯一的散列值,可是这些散列值一般都较长,不太合适用于 URL 缩短。
(2)自增 ID 法
自增 ID 法是指,将长链接对应一个主动增加的 ID 值,并将其转为 62 进制表明。例如:0-9a-zA-Z 一共有 62 个字符,恣意一个 URL 都能够运用这 62 个字符来表明。
在运用自增 ID 法完成 URL 缩短的时候,需求考虑以下两点:
(a) ID 的生成办法:ID 能够选用数据库中自增 ID 的办法,或许经过 Redis 等缓存服务进行生成。
(b) ID 和长链接的映射联系的存储:ID 和长链接的映射联系能够运用 Redis 进行存储,也能够运用数据库进行存储。
(3)图编码法
图编码法指的是将长链接对应的二维码图片编码成字符串办法的短链接。这个过程能够分为以下两步:
(a) 先将长链接对应的二维码图片生成;
(b) 将二维码图片经过 base64 编码,将编码后的字符串作为短链接。
2. 短链接生成流程
依据前面所介绍的三种短链接生成原理,URL 缩短的根本流程大致如下:
(1)用户输入原始长链接;
(2)调用短链接生成服务;
(3)挑选合适的生成办法(Hash 算法、自增 ID 法、图编码法),生成短链接;
(4)将短链接与长链接进行映射,并将其存储到数据库或缓存中;
(5)返回短链接给用户,并将短链接保存在数据库中。
3. 短链接拜访流程
当用户运用短链接拜访时,根本流程如下:
(1)用户拜访短链接地址;
(2)服务器依据短链接查找映射表获取长链接;
(3)服务器进行 3xx 的重定向;
(4)浏览器依据重定向的地址进行跳转。
三、长链转短链代码完成
下面别离介绍 Hash 算法和自增 ID 法完成 URL 缩短的代码完成。
1. 依据Hash算法完成URL缩短
以下是依据 MD5 进行 URL 缩短的 Java 代码完成:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class ShortUrlGenerator {
private static final String ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final int BASE = ALPHABET.length();
public static String getShortUrl(String originalUrl) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(originalUrl.getBytes());
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
int n = ((digest[i] & 0xFF) << 24)
| ((digest[i + 1] & 0xFF) << 16)
| ((digest[i + 2] & 0xFF) << 8)
| ((digest[i + 3] & 0xFF));
sb.append(ALPHABET.charAt(n % BASE));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
代码中的 getShortUrl() 办法计算 URL 的 MD5 值,并将其转换为 4 位字符串作为短链接。由于 MD5 算法的输出值长度为 16 字节(128位),因而能够挑选取其中的前 4 个字节进行编码,这样生成的短链接应该现已满足短而不易重复。
2. 依据自增ID完成URL缩短
以下是依据 MySQL 自增 ID 完成 URL 缩短的 Java 代码完成:
import java.util.HashMap;
import java.util.Map;
public class ShortUrlGenerator {
private static final String ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final int BASE = ALPHABET.length();
private static final String HOST = "http://short.example.com/";
private static final Long MAX_ID = 100000L;
private Long id = 0L;
private Map<Long, String> urlMap = new HashMap<>();
public String getShortUrl(String originalUrl) {
Long key = id % MAX_ID;
String shortUrl = convertKeyToShortUrl(key);
urlMap.put(id, originalUrl);
id++;
return HOST + shortUrl;
}
private String convertKeyToShortUrl(Long key) {
StringBuilder sb = new StringBuilder();
do {
int index = (int) (key % BASE);
sb.append(ALPHABET.charAt(index));
key /= BASE;
} while (key > 0);
return sb.toString();
}
public String getOriginalUrl(String shortUrl) {
String key = shortUrl.replace(HOST, "");
Long id = convertShortUrlToKey(key);
return urlMap.get(id);
}
private Long convertShortUrlToKey(String shortUrl) {
Long key = 0L;
for (int i = 0; i < shortUrl.length(); i++) {
char c = shortUrl.charAt(i);
int index = ALPHABET.indexOf(c);
if (index < 0) {
throw new IllegalArgumentException("Invalid character in URL");
}
key = key * BASE + index;
}
return key;
}
}
代码中的 getShortUrl() 办法经过保存一个自增 ID 值,在每次调用时生成短链接。ID 能够保存在数据库或缓存中,这儿运用 Java 内存。
convertKeyToShortUrl() 办法将 ID 转换为短链接字符串,并依照指定字符集输出,这儿选用了与 Hash 算法共同的字符集。
getOriginalUrl() 办法则是依据短链接查找对应的长链接。
总结一下
本文首要介绍了长链转短链的原理和完成办法。URL 缩短技能不只能够方便用户操作和进步安全性,更能够进步拜访效率,定制短链接对应回源地址,削减漂泊请求浪费等。
不过在详细完成 URL 缩短的过程中,需求依据实际业务场景和需求进行挑选。一起也需求留意,运用 URL 缩短可能会导致对 URL 拜访的 tracking 和监控的困难,因而需求细心考虑运用场景。
