相对URI以及base的设置
標準:
RFC3986 - Uniform Resource Identifier (URI): Generic Syntax
html里面有個元素類型叫base,這本來是個簡單的概念,但是看了下html標準(https://www.w3.org/TR/WD-html40-970917/htmlweb.html) 中舉的一個base設置的例子,我倒有點困惑了,這個例子是這樣的:
As an example of relative URL resolution, assume we have the base URL "http://www.acme.com/support/intro.html". The relative URL in the following markup for a hypertext link:
<A href="suppliers.html">Suppliers</A> would expand to the full URL "http://www.acme.com/support/suppliers.html"
這里的base是一個html頁面的地址,我之前總以為base應該是個目錄的地址。于是去看了下URI的標準,算是明晰了相對URI和base的概念。
相對引用(Relative Reference)和相對路徑引用(relative-path reference)
rfd3986 的 4.2. Relative Reference。
并不是說一個URI看起來像文件系統中的相對路徑就是相對引用,實際上,按照標準中規定的格式看,沒有最前面的scheme(就是http:, ftp: 之類的)的uri都是相對引用,也就是說www.example.com/abc.html也是個相對引用。
相對引用又分為 絕對路徑引用 和 相對路徑引用,這個劃分就和我們分辨文件系統中的相對/絕對路徑差不多了: 以 '/' 開頭的就是絕對路徑引用,否則就是相對路徑引用。
base和相對引用的解析
一個相對引用(不管是絕對路徑引用還是相對路徑引用)都不是一個完整的uri,這就需要解析成完整的uri才能使用,而base就是這個解析這個相對引用的基準。
顯然,一個相對引用需要和base以某種方式合并起來,才能構成一個完整的uri,標準文檔的5.2. Relative Resolution 給出了解析的過程,這個過程是一個先分解后合并的過程,合并的步驟中包括path的合并這一步,從path合并的說明中,就可以明白為什么base可以設置成一個具體頁面的地址。
rfc3986 5.2.3. Merge Paths。
首先,只有當相對引用的path部分是一個相對路徑時,其path才需要和base的path進行合并,如果是絕對路徑,直接使用絕對路徑引用的path。
merge中明確說明: 把相對引用的路徑部分添加到base uri的路徑 除去最后一段的部分。并且還特別說明除去最后一段就是指除去最右邊的'/'后面的任何字符。
結論
base uri中的path部分確實是起到類似指定一個目錄的作用,只不過如果你設定的base如果不是以 '/' 結尾,那么使用時就會認為最后一段不是目錄而把最后一段去掉,如果是以 '/' 結尾,就認為是一個目錄,可以直接使用。
轉載于:https://www.cnblogs.com/a-distant-bright-star/p/7066445.html
總結
以上是生活随笔為你收集整理的相对URI以及base的设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 敏捷开发系列学习总结(6)——你用什么工
- 下一篇: 产品和产品经理