如何在Rust程式語言中處理網址的前綴? | MagicLen
文章推薦指數: 80 %
在開發Web應用程式的時候,為了要讓應用程式可以被設定在不同網域,或是不同的網址目錄下,通常會需要對應用程式進行「網址前綴」的設定。
MagicLen
內容
如何在Rust程式語言中處理網址的前綴?
2018年11月25日
MagicLen
Rust
編輯
本篇文章更新於
2022年5月4日17時
在開發Web應用程式的時候,為了要讓應用程式可以被設定在不同網域,或是不同的網址目錄下,通常會需要對應用程式進行「網址前綴」的設定。
舉例來說,如果要把某個Web應用程式運作在「tool.magiclen.org」這個網域的「url」路徑下,我們可以將「https://tool.magiclen.org/url」這個「網址前綴」設定給該Web應用程式,讓它知道如何去正確處理它所用到的其它資源的路徑。
例如它有某個資源的路徑為「images/logo.jpg」,有了「網址前綴」的資料之後,該Web應用程式就知道要連結到「images/logo.jpg」資源的網址是「https://tool.magiclen.org/url/images/logo.jpg」了!
但是由於我們的網址有「通訊協定」(protocol)的存在,且連線也可以透過多個不同的「連接埠」(port),因此在進行「網址前綴」的產生時,並不是直接把通訊協定、網域和路徑串接在一起就好了。
舉例來說,HTTPS協定預設使用「443」連接埠,如果我們要使用其它連接埠的話,例如444,則必須要將網址寫成「https://tool.magiclen.org:444/url」;可是如果連接埠就是使用預設的「443」,我們通常不會將網址寫成「https://tool.magiclen.org:443/url」,因為它實在不太好看。
為了處理預設連接埠的問題,我們會寫出以下這樣的程式:
letmuturl_prefix=String::new();
ifis_https{
url_prefix.push_str("https://");
}else{
url_prefix.push_str("http://");
}
url_prefix.push_str(domain);
ifis_https&&port!=443||!is_https&&port!=80{
url_prefix.push_str(":");
url_prefix.push_str(&port.to_string());
}
ifletSome(path)=path{
if!path.starts_with("/"){
url_prefix.push_str("/");
}
url_prefix.push_str("path");
}
以上的程式是讓使用者分別輸入該Web應用程式有沒有透過HTTPS協定來連線(is_https),以及其所在的網域名稱(domain)和路徑(path)來組成「網址前綴」(url_prefix)。
當然,您也可以讓使用者直接輸入完整的「網址前綴」,只是這樣可能就需要再用其它程式去驗證使用者輸入的「網址前綴」是否合法,且通訊協定、網域、連接埠、路徑等等的資訊可能也還要透過解析使用者輸入的「網址前綴」才能得到。
兩種方式的效果都差不多,不過筆者比較偏好前者一開始就把各個資訊拆開設定,再由應用程式來組成「網址前綴」的方式,程式實作起來會比較簡單一點。
URLPrefix
因為每次新開一個Web應用程式專案,幾乎都要撰寫上述提到的「網址前綴」產生程式。
所以筆者開發了「URLPrefix」套件,提供了create_prefix函數來產生「網址前綴」。
Crates.io
https://crates.io/crates/url-prefix
Cargo.toml
url-prefix="*"
使用方法
url_prefix這個crate底下的create_prefix函數還必須搭配其中的Protocol列舉。
用法如下:
letprefix=url_prefix::create_prefix(url_prefix::Protocol::HTTPS,"magiclen.org",Some(8100),Some("url-prefix"));
assert_eq!("https://magiclen.org:8100/url-prefix",prefix);
當輸入的連接埠並不是通訊協定的預設連接埠時,「網址前綴」中才會明確地包含連接埠。
Rust、url-prefix
關於作者
MagicLen
各位好,我是MagicLen,是這網站的管理員。
我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。
我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。
如果你有興趣認識我,可以加我的Facebook(點我),並且請註明是從MagicLen來的。
載入中……
隨機文章
用Rust開發WebAssembly─第六章:康威生命遊戲的效能
2019年9月19日
[烘焙初學者]巧克力布朗尼(Brownie)
2016年2月21日
數獨遊戲
2012年3月20日
TypeScript學習之路─第一章:認識TypeScript
2019年11月12日
誰說紙鶴不能有腳?我偏偏要讓它有四隻腳!
2015年6月8日
免費訂閱本站電子報
交換連結
FuYUan'sSpace
Mayday麥帶先生
電腦綠生活PCGreenLife
哈啦客談天說地
程式的奇技淫巧之道
坂本Sakamoto.blog-探究科技未知領域
iZO手札
軟硬e點通
英文練習網
阿摩斯的小確幸
冠均網頁設計公司
低調一點
Spaceack'sBlog
港澳資訊
迴旋人生
申請交換連結
申請交換連結
×
延伸文章資訊
- 1为什么有的网站的域名有www 前缀
带www 前缀的域名实际上是一个子域名,像github·com 这样没有前缀的才是一个根域名。带和不带www 的域名可以指向两个完全不同的网站,只是由于习惯,站长 ...
- 2網址前綴"http://"的前世今生 - 每日頭條
大家對"http://"應該都不陌生,在瀏覽網頁時地址欄的網址前綴經常會出現這麼個東西,即使我們在地址欄輸入一個網址時並沒有輸入「http://」, ...
- 3信息通信网络技术 - 第 214 頁 - Google 圖書結果
网络无级化以及 CIDR 选路的提出对于节省网址,提高网址利用率做出了重大贡献。上述的网络识别码又称为地址前缀。在实现网址无级化之前,这种前缀的长度只是若干个固定 ...
- 4http://和www.前缀网站有什么具体区别? - 知乎
http://和www.前缀网站有什么具体区别? 很多网站都是以上两种起头的,具体有哪些区别呢,请分类具体阐述下。谢谢!
- 5關於網址的前綴後綴字母小秘密 - 幫趣
小諾在這裡簡單說明下:在瀏覽器的地址欄里輸入的網站地址叫做URL (Uniform Resource Locator,統一資源定位符)。 就像每家每戶都有一個門牌地址 ...