短鏈接和長鏈接

短鏈接和長鏈接

使用短鏈接的好處:短、字符少、美觀、便于發(fā)布、傳播

比如我的個人博客地址:http://will-johnson.gitee.io/blog/

使用百度短網(wǎng)址服務(wù)轉(zhuǎn)換為短網(wǎng)址為:https://dwz.cn/Eps6teX5

現(xiàn)象

當(dāng)在瀏覽器輸入短網(wǎng)址回車時,會有一個302跳轉(zhuǎn)。然后瀏覽器重新訪問location地址

image

對于302多余的解釋

302 Found,Moved Temporarily,可以簡單的理解為該資源原本確實存在,但已經(jīng)被臨時改變了位置;換而言之,就是請求的資源暫時駐留在不同的URI下

對于服務(wù)器,通常會給瀏覽器發(fā)送HTTP Location頭部來重定向到新的新位置,然后瀏覽器重新加載該Location

HTTP Location 是在兩種情況下,因來自HTTP服務(wù)器的響應(yīng)中返回頭域:1.要求網(wǎng)頁瀏覽器加載其他網(wǎng)頁(域名轉(zhuǎn)址)

但是

跳轉(zhuǎn)用301還是302?301是永久重定向,302是臨時重定向。短地址一經(jīng)生成就不會變化,所以用301是符合http語義的。同時對服務(wù)器壓力也會有一定減少。 但是如果使用了301,我們就無法統(tǒng)計到短地址被點(diǎn)擊的次數(shù)了。而這個點(diǎn)擊次數(shù)是一個非常有意思的大數(shù)據(jù)分析數(shù)據(jù)源。能夠分析出的東西非常非常多。所以選擇302雖然會增加服務(wù)器壓力,但是我想是一個更好的選擇。

  1. 301

表示被請求的資源已永久移動(Moved Permanently),永久移動到新位置,任何對此資源的引用都應(yīng)該使用本響應(yīng)返回的若干個URI之一。如果可能,擁有鏈接編輯功能的客戶端應(yīng)當(dāng)自動把請求的地址修改為從服務(wù)器反饋回來的地址。正常這個響應(yīng)是可緩存的,除非額外指定。新的永久性的URI應(yīng)當(dāng)在響應(yīng)的Location域中返回,正常實體中應(yīng)當(dāng)包含指向新的URL的超鏈接及簡短說明,除非是HEAD類的請求。

  1. 302

如果返回狀態(tài)碼302,表示要求客戶端臨時重寶向(Moved Temporarily)。由于是臨時重定向,客戶端應(yīng)當(dāng)繼續(xù)向原有地址發(fā)送以后的請求,并且只有在Cache-Control或Expires中指定的情況下,響應(yīng)才可以緩存。注意:雖然RFC 1945和RFC 2068規(guī)范不允許客戶端在重定向時改變請求的方法,但是很多現(xiàn)存的瀏覽器將302響應(yīng)視作為303響應(yīng),并且使用GET方式訪問在Location中規(guī)定的URI,而無視原先請求的方法。因此狀態(tài)碼303和307被添加了進(jìn)來,用以明確服務(wù)器期待客戶端進(jìn)行何種反應(yīng)。

原理

短鏈接的原理其實就是:

  • 將長鏈接通過一定的手段生成一個短鏈接

  • 訪問短鏈接時實際訪問的是短鏈接服務(wù)器,然后根據(jù)短鏈接的參數(shù)找回對應(yīng)的長鏈接

  • 重定向跳轉(zhuǎn)

業(yè)內(nèi)實現(xiàn)

發(fā)號器(ID自增)+62進(jìn)制編碼

如對于我的博客地址:http://will-johnson.gitee.io/blog/,發(fā)號16進(jìn)制:816e351d15bf,轉(zhuǎn)換為62進(jìn)制即為:Eps6teX5

為什么要用62進(jìn)制轉(zhuǎn)換

  • 62進(jìn)制轉(zhuǎn)換是因為62進(jìn)制轉(zhuǎn)換后只含數(shù)字+小寫+大寫字母。而64進(jìn)制轉(zhuǎn)換會含有/,+這樣的符號(不符合正常URL的字符)

  • 10進(jìn)制轉(zhuǎn)62進(jìn)制可以縮短字符,如果我們要6位字符的話,已經(jīng)有560億個組合了。

但是如何實現(xiàn)一個長地址多次轉(zhuǎn)換都是同一個短地址呢?

這個不能完全做到。如果想要完全做到,那么就需要保存長地址到短地址的映射關(guān)系,得不償失。

可以采取一個折中的方案,采用有有效時間的kv存儲,也就是一個緩存系統(tǒng)。

其他方法

  • 實現(xiàn)一個算法,把長地址轉(zhuǎn)成短地址,但是不存在逆運(yùn)算。我們需要把短對長的關(guān)系存到DB中,在通過短查長時,需要查DB

    • 不可以,會出現(xiàn)碰撞
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容