先來簡單說下URI、URL、URN這三個鬼東西。
URI全稱Uniform Resource Identifier,統一資源標識符
URL全稱Uniform Resource Locator,統一資源定位符
URN全稱Uniform Resource Name,統一資源名稱
URI(統一資源標識符)有以下兩種形式
URL是一個用於標識某一互聯網資源名稱的字符串
URN是URL的一種更新形式,統一資源名稱不依賴於位置,並且有可能減少失效連接的個數。
大白話就是URL和URN都是URI的子集,其中URI是URL的另一種更新形式而已
下面來說下URL的組成
舉個栗子,比如https://www.baidu.com:80/item/url/110640?fr=aladdin這個地址
URL由下面幾個部分組成
第一部分-協議(scheme)
該URL的協議部分是https(超文本傳輸協議),https表示用安全套接字層傳送的超文本傳輸協議,它是一種加密的HTTP傳輸協議,比HTTP更安全
常用的協議有http、https、ftp、file、mailto
第二部分-域名
一個URL中也可以使用IP地址作為域名使用
域名分為頂級域名www.baidu.com、二級域名baike.baidu.com、三級域名baike.tieba.baidu.com
第三部分-端口
用來區分同一台服務器上不同服務的標識
HTTP默認端口為80,端口范圍是0-65535之間
HTTPS默認端口號443,FTP默認端口號21
跟在域名后面的是端口,域名和端口之間用 ":" 作為分隔符。另外端口不是URL必須的部分,如果省略端口將采用默認端口
第四部分-虛擬目錄(路徑)
從域名后的第一個"/"開始到最后的/為止為虛擬目錄。虛擬目錄也不是URL必須部分
這里的/斜杠可能是目錄也可能是接口
第五部分-文件名(?查詢信息)
域名最后一個斜杠 / 到?部分,如果沒有?則是從域名后的最后一個 / 到 #
其中?代表查詢信息,window.location.search方法可以獲取到,該方法可以讀也可以寫,寫了查詢信息會刷新頁面
第六部分-錨信息(#哈希)
#號之后的都是錨信息 hash值。window.location.hash方法可以獲取到,該方法也是可讀可寫,寫了錨信息不會刷新頁面
其中window.onhashchange方法當hash值發生變化時候才會觸發該方法