日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网页短链接的实现原理

發(fā)布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网页短链接的实现原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

網(wǎng)頁短鏈接是指將原本較長的網(wǎng)址轉(zhuǎn)化成較短的網(wǎng)址,從而便于用戶的記憶與社交軟件上的傳播。很多互聯(lián)網(wǎng)公司都提供了生成短鏈接的服務(wù),比如新浪微博短網(wǎng)址服務(wù)等,本文就來聊聊實(shí)現(xiàn)短鏈接服務(wù)的基本原理。

我們不妨先來看一下短鏈接服務(wù)的整個流程,以前面提到的微博短網(wǎng)址服務(wù)為例。用戶輸入想要縮短的長網(wǎng)址,轉(zhuǎn)化后得到一個以http://t.cn開頭的短網(wǎng)址,然后用戶將該鏈接通過微信或者微博等方式分享給朋友,其他人點(diǎn)擊之后即可進(jìn)入原本長網(wǎng)址所對應(yīng)的頁面。整個流程如下圖所示:

從圖中可以很清楚地看到,實(shí)現(xiàn)短鏈接服務(wù)的關(guān)鍵是兩個步驟:1、如何把一個任意長的字符串轉(zhuǎn)化成一個較短的字符串;2、從短網(wǎng)址如何還原出長網(wǎng)址。第一個問題很容易讓人想到哈希算法,通過一定的方式將任意長的文本轉(zhuǎn)化成一個固定長度的字符串,只要目標(biāo)字符串的長度適當(dāng),那么不同的輸入幾乎不可能對應(yīng)同一個字符串。不過這么做有個缺點(diǎn)就是無法從得到的結(jié)果還原輸入的字符串,因此不適用于我們的場景。但基于哈希算法的思想,我們可以設(shè)計(jì)一種以多進(jìn)制為基礎(chǔ)的算法完成這個任務(wù)。

具體而言,我們可以創(chuàng)建一個用于保存長網(wǎng)址的數(shù)據(jù)表,比如就叫Url,這張表很簡單,只需要兩個字段,一個主鍵用于保存id,一個url字段用于存放原始的長網(wǎng)址,每個長網(wǎng)址都在這張表有一條記錄。當(dāng)進(jìn)行長網(wǎng)址轉(zhuǎn)換時,先檢查數(shù)據(jù)表中是否存在該長網(wǎng)址,若是直接獲取該記錄的id,否則在數(shù)據(jù)表中創(chuàng)建一條新記錄,并返回其id。對于這個id,我們可以得到一個多進(jìn)制表示下的新值,比如在以“0-9a-z”這36個字符表示的36進(jìn)制中,一億這個數(shù)字可以被表示成1njchs,只需要6個字符即可,將這6個字符拼接到準(zhǔn)備好的域名后即可得到一個對應(yīng)的短網(wǎng)址返回給用戶。由于一億個網(wǎng)址只需要6個字符,因此這種方式足夠滿足大部分網(wǎng)站的需求。

而當(dāng)用戶點(diǎn)擊了我們生成的短網(wǎng)址后,只需要將代表多進(jìn)制的這部分提取出來,還原成十進(jìn)制的數(shù)字后查表即可得到原始的長網(wǎng)址,再根據(jù)網(wǎng)址做一個重定向即可讓用戶訪問到原始的網(wǎng)頁。具體的實(shí)現(xiàn)可以參考下面的typescript代碼

// 將原始的長鏈接通過36進(jìn)制轉(zhuǎn)化為短鏈接 export async function long2short(url: string) {if (!url.startsWith('http://') && !url.startsWith('https://')) {throw new Error('Invalid url');}if (url.startsWith(config.shortLinkBaseUrl)) {return url;}let item = await Url.getByUrl(url);if (!item) {item = await Url.create(url);}return config.shortLinkBaseUrl + item.id.toString(36); }// 將短鏈接還原為真實(shí)的長鏈接 export async function short2long(url: string) {let item = await Url.select(Number.parseInt(url, 36));if (!item) {throw new Error('Invalid url');}return item.url; }

這里的config.shortLinkBaseUrl也就是我們用來做短鏈接服務(wù)的域名,在前面的例子中就是http://t.cn,我們需要在這個域名對應(yīng)的服務(wù)器內(nèi)實(shí)現(xiàn)短鏈接的服務(wù),同時這個域名本身不能太長,否則就失去了它的意義。另外還有一點(diǎn)值得注意,就是在根據(jù)長網(wǎng)址去數(shù)據(jù)表查找它是否存在時,因?yàn)殚L網(wǎng)址可以任意長,因此直接用它作為索引在數(shù)據(jù)表中查找的話效率較低,可以考慮在表中增加一個hash字段,保存長網(wǎng)址的哈希值,并通過查找哈希值來判斷條目是否存在,提高查找的效率。

以上就是短鏈接服務(wù)的基本實(shí)現(xiàn)方法,最核心的其實(shí)就是多進(jìn)制的使用,有興趣的朋友可以自己動手試試看,有任何問題歡迎留言交流。

總結(jié)

以上是生活随笔為你收集整理的网页短链接的实现原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人a级片 | 夜夜躁日日躁狠狠久久av | 黄色日本网站 | 草草免费视频 | 日韩精品一区在线观看 | 国产精品久久久久av | 毛片a级片 | 四虎国产精品永久在线国在线 | 日韩91在线 | 色老头一区二区三区 | 伊人看片 | 成人欧美一区二区三区黑人 | 亚洲精品国偷拍自产在线观看蜜桃 | 日爽夜爽 | 久久久久久黄 | 国产女在线 | 日本高清有码视频 | 少妇极品熟妇人妻无码 | 欧美成人专区 | 色www.| 日韩aaaaa | 成人毛片在线播放 | 美脚の诱脚舐め脚视频播放 | 男女羞羞在线观看 | 日本少妇毛茸茸高潮 | 日韩和欧美一区二区 | 日本少妇激情舌吻 | 欧美三日本三级少妇三级99观看视频 | 久久99国产精品成人 | 中文字幕在线第一页 | 二区久久 | 九七电影院97理论片 | 黄色小视频国产 | 日日躁夜夜躁 | 91超碰在线免费观看 | 亚洲 欧美 中文字幕 | 中文字幕二区在线观看 | 大乳女喂男人吃奶 | 可以免费看污视频的网站 | 亚洲国产aⅴ成人精品无吗 日韩乱论 | 国产农村妇女毛片精品久久麻豆 | 日韩欧美国产一区二区三区在线观看 | www日日日| 西西人体44www大胆无码 | av在线官网| 奇米影视一区二区 | 午夜av免费| 深夜在线视频 | av男人天堂av | 中国老头性行为xxxx | 日韩综合网| 中文字幕+乱码+中文乱码www | 亚洲激情视频小说 | 乌克兰做爰xxxⅹ性视频 | www.88av| 在线不卡免费视频 | www.五月激情 | 天天艹夜夜 | 久久久www免费人成人片 | 99视频一区 | 极品美妇后花庭翘臀娇吟小说 | 久久久噜噜噜 | 亚洲成人精品在线 | 91漂亮少妇露脸在线播放 | 雪花飘电影在线观看免费高清 | 久久久久综合网 | 爱福利视频一区二区 | 麻豆免费视频网站 | 国语对白久久 | 日韩欧美精品一区 | 亚州激情视频 | 亚欧洲精品在线视频 | www.国产在线 | 另类捆绑调教少妇 | 国产日韩欧美精品一区二区 | 免费网站91 | 人妻少妇精品无码专区久久 | 久久桃色 | 国产精品理论在线观看 | 中国黄色大片 | 少妇导航av | 麻豆一区二区三区精品视频 | avtt在线播放 | 麻豆视频在线播放 | 久久久久亚洲AV成人无码国产 | 国产精品88av | 免费看一级黄色大片 | 97人妻精品一区二区 | 日韩欧美无| 99资源网| 亚洲第一天堂av | 电车痴汉在线观看 | 大肉大捧一进一出视频 | 激情六月婷 | 熊猫成人网 | 久久一道本 | 丝袜一区二区三区四区 | 国产乱国产乱老熟300部视频 | 无码精品人妻一区二区三区影院 |