解析URI是個有意思的東西,之前沒有意識到,原來這東西也可以這麼複雜。
URI
在維基百科中對於URI的解釋是這樣子的:
在電腦術語中,統一資源識別碼(Uniform Resource Identifier,或URI)是用來識別某一網路資源名稱的字串。 此種標識允許使用者對網路中(一般指萬維網)的資源透過特定的協定進行交互操作。 URI由包括確定語法和相關協議的方案所定義。
引自網路上對於URI組成的解釋,而這些可以在稍後對於URI的解析中看出來。
URI一般由三個部分組成:
1.存取資源的命名機制。
2.存放資源的主機名稱。
3.資源本身的名稱,由路徑表示。
或可以說是這樣子,兩者看起來是一致的。
URL的格式由下列三部分組成:
1.協定(或稱服務方式)
2.存有該資源的主機IP位址(有時也包含連接埠號碼)
3.主機資源的具體位址。 ,如目錄和檔案名稱等
URI解析
「解析」一個URI意味著將一個相對URI引用轉換為絕對形式,或透過嘗試取得一個可解引URI或一個URI引用所代表的資源來解引用這個URI。文件處理軟體的「解析」部分通常同時提供這兩種功能。
Javascript URI解析
簡單地以部落格中的搜尋JS為例,以下就是其的URL,
http://www.jb51.net/search/?q=js&type=
然後便有了
var parser = document.createElement('a');
parser.href = "http://www.jb51.net/search/?q=js&type="
我們便可以知道其的協定、連接埠號碼、主機、具體位址等
parser.protocol;
parser.host;
parser.pathname;
parser.search;
回傳的結果便是
protocol:http
host:www.jb51.net
pathname:/search/
search:?q=js&type=
上面的結果加出來,便是一個完整的URI。只是對於parser.search這部分不是很理解,對於?號而言,應該是參數,用於搜尋的參數。
如果是對就於一個郵件的URI來說,假設URI是
mailto:h@jb51.net?subject=hello
那麼
var parser = document.createElement('a');
parser.href = "mailto:h@jb51.net?subject=hello";
> parser.protocol
"mailto:"
> parser.pathname
"h@jb51.net"
> parser.search
"?subject=hello"