目前大部分场景下都是长连接,为了各种目的(短信等平台字符限制)进而产生了短链
短链生成#
- 通过哈希算法生成
- 通过发号器生成
二者最后都可以通过 base 算法减少长度
哈希算法生成#
可能 hash 冲突
// 1.hash
func GenerateShortenUrl(initUrl, userID string) string {
// 通过 256 加密
urlSHA256 := sha256f(initUrl + userID)
genNum := new(big.Int).SetBytes(urlSHA256).Uint64()
// base 58 不包括误导性字母 o,O,I,l和+,/
// 减少字符长度
return base58Encoded([]byte(fmt.Sprintf("%d", genNum)))[0:8]
}
func sha256f(input string) []byte {
hashed := sha256.Sum256([]byte(input))
return hashed[:]
}
func base58Encoded(input []byte) string {
encoded, err := base58.BitcoinEncoding.Encode(input)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
return string(encoded)
}
发号器生成#
通过雪花算法生成 id
重定向#
一般通过
302
重定向,301
永久重定向会在浏览器留下缓存,无法通过访问短链统计数据