目前大部分場景下都是長連接,為了各種目的(簡訊等平台字符限制)進而產生了短鏈
短鏈生成#
- 通過哈希算法生成
- 通過發號器生成
二者最後都可以通過 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
永久重定向會在瀏覽器留下快取,無法通過訪問短鏈統計數據