URL 是一個網頁地址。
URL可以由字母組成,如"runoob.com",或互聯網協議(IP)地址: 192.68.20.50。大多數人進入網站使用網站域名來訪問,因為 名字比數字更容易記住。
URL - 統一資源定位器
Web瀏覽器通過URL從Web服務器請求頁面。
當您點擊 HTML 頁面中的某個鏈接時,對應的 <a> 標簽指向萬維網上的一個地址。
一個統一資源定位器(URL) 用於定位萬維網上的文檔。
一個網頁地址實例: http://www.runoob.com/html/html-tutorial.html 語法規則:
說明:
- scheme - 定義因特網服務的類型。最常見的類型是 http
- host - 定義域主機(http 的默認主機是 www)
- domain - 定義因特網域名,比如 runoob.com
- :port - 定義主機上的端口號(http 的默認端口號是 80)
- path - 定義服務器上的路徑(如果省略,則文檔必須位於網站的根目錄中)。
- filename - 定義文檔/資源的名稱
常見的 URL Scheme
以下是一些URL scheme:
Scheme | 訪問 | 用於... |
---|---|---|
http | 超文本傳輸協議 | 以 http:// 開頭的普通網頁。不加密。 |
https | 安全超文本傳輸協議 | 安全網頁,加密所有信息交換。 |
ftp | 文件傳輸協議 | 用於將文件下載或上傳至網站。 |
file | 您計算機上的文件。 |
URL 字符編碼
URL 只能使用 ASCII 字符集.
來通過因特網進行發送。由於 URL 常常會包含 ASCII 集合之外的字符,URL 必須轉換為有效的 ASCII 格式。
URL 編碼使用 "%" 其后跟隨兩位的十六進制數來替換非 ASCII 字符。
URL 不能包含空格。URL 編碼通常使用 + 來替換空格。
一個URL(統一資源路徑地址)包含哪些部分呢?舉個例子,比如 “http://www.baidu.com/index.html?name=mo&age=25#dowell”,在這個例子中我們可以分成六部分;
1、傳輸協議:http,https
2、域名: 例www.baidu.com為網站名字。 baidu.com為一級域名,www是服務器
3、端口: 不填寫的話默認走的是80端口號
4、路徑 http://www.baidu.com/路徑1/路徑1.2。/表示根目錄
5、攜帶的參數:?name=mo
6、哈希值:#dowell
傳輸協議
傳輸協議是用來完成客戶端和服務器端之間數據傳輸的;
傳輸協議可分為三類
1、http:超文本傳輸協議
客戶端和服務器端傳輸的內容除了文本以外,還可以傳輸圖片、音頻和視頻等文件流(二進制編碼 | base64碼),以及XML格式的數據等,是目前應用最廣泛的。
2、https:http ssl,它比http更加安全,因為數據內容的傳輸通道是經過SSL加密的(需要在服務器端進行特殊的處理),涉及金融類的網站一般都是使用https。
3、ftp:資源文件傳輸協議
用於客戶端把資源文件(不是代碼)上傳到服務器端,或者從服務器端下載一些資源文件(一般傳輸的內容會比http這類協議傳輸的內容多)。
域名
用於解析對應的IP地址,便於記憶;
頂級域名(一級域名):baidu.com;
二級域名:www.baidu.com sports.baidu.com ai.baidu.com
三級域名:my.sports.baidu.com;
端口號
在服務器發布項目的時候,我們可以通過端口號區分當前服務器上不同的項目。如:www.baidu.com:8080,一台服務器的端口號取值范圍在 0 ~ 65535 之間,如果電腦上安裝了很多程序,有一些端口號是被占用的;
http:默認端口號80
https:默認端口號443
ftp:默認端口號21
對於以上三個端口號其實很重要,如果被其他程序占用,則我們就不能使用了,所以服務器上一般是禁止安裝其他程序的。
資源文件路徑名稱
在服務器中發布項目的時候,我們一般都會配置一些默認文檔,即使用戶不輸入文件的名稱,服務器也會默認找到配置好的文檔(一般默認文檔都是index.**)。
為了做SEO優化,會把一些動態頁面的地址(xxx.php、xxx.aspx、xxx.asp、 xxx.jsp)進行URL重寫(需要服務器處理)。
問號傳參(可有可無)
把一些值通過 “key=value” 的方式放在一個URL的末尾,通過?傳遞;
作用:
1、在ajax請求中,我們可以通過問號傳遞參數的方式,在客戶端把一些信息傳遞給服務器,服務器根據傳遞信息的不一樣,返回不同的數據;
2、清除ajax get方法的緩存,?math_random=0.123456;
3、通過URL傳遞參數的方式,實現頁面之間的通信;
HASH值(可有可無)
作用
1、可做頁面中的錨點定位
2、在單頁應用開發中作為前端路由使用(Vue Router、React Router);
---------------------
就以下面這個URL為例,介紹下普通URL的各部分組成
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的URL可以看出,一個完整的URL包括以下幾部分:
1、協議部分:該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"后面的“//”為分隔符
2、域名部分:該URL的域名部分為“www.aspxfans.com”。一個URL中,也可以使用IP地址作為域名使用
3、端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個URL必須的部分,如果省略端口部分,將采用默認端口80
4、虛擬目錄部分:從域名后的第一個“/”開始到最后一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”
5、文件名部分:從域名后的最后一個“/”開始到“?”為止,是文件名部分,如果沒有“?”,則是從域名后的最后一個“/”開始到“#”為止,是文件部分,如果沒有“?”和“#”,那么從域名后的最后一個“/”開始到結束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認的文件名
6、錨部分:從“#”開始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分
7、參數部分:從“?”開始到“#”為止之間的部分為參數部分,又稱搜索部分、查詢部分。本例中的參數部分為“boardID=5&ID=24618&page=1”。參數可以允許有多個參數,參數與參數之間用“&”作為分隔符。
---------------------
目錄
一、#說明
二、?說明
三、&說明
一、#說明
1、#的涵義
#代表網頁中的一個位置。其右面的字符,就是該位置的標識符。比如,http://www.example.com/index.html#print就代表網頁index.html的print位置。瀏覽器讀取這個URL后,會自動將print位置滾動至可視區域。
為網頁位置指定標識符,有兩個方法。一是使用錨點,比如<a name="print"></a>,二是使用id屬性,比如<div id="print">。
就比如說,我們想到達頁面中的某一個指定的位置,可以通過#來實現,我們經常也能看到這樣的情況。
在VUE中,路由的實現方式有兩種,其中一種就是通過#標識符進行頁面內導航從而實現路由切換。
2、HTTP請求不包括#
#是用來指導瀏覽器動作的,對服務器端完全無用。所以,HTTP請求中不包括#。
比如,訪問下面的網址,http://www.example.com/index.html#print,瀏覽器實際發出的請求是這樣的:
GET /index.html HTTP/1.1
Host: www.example.com
也就是說,比如我們用vue去跳轉一個指定的頁面,那么我們向服務器端請求還是#號之前的內容,#后面的內容用來指導瀏覽器動作。
這里遇到一個坑,在微信瀏覽器中,只存在於部分安卓機,如果你訪問http://wx.thingcom.cn/#/,然后做微信授權,服務器后台重定向到http://wx.thingcom.cn/#/user。在這個時候,微信瀏覽器訪問服務器資源,它認為同樣的資源已經請求過,會從本地緩存中獲取資源。按道理說,本地瀏覽器應該可以根據#之后的地址重新定向頁面,但是部分機型不成功。原因可能是部分機型不支持當前頁面的重定向,依舊加載原始頁面,重定向不同於刷新。
解決方法是在#之前加時間戳,http://wx.thingcom.cn/?time=2312234#/user,強制瀏覽器再次去服務器中獲取資源。這里還有一個問題,如果你這么做了之后,那么接下來你的所有路由跳轉,全部都是在#之后,也就是說http://wx.thingcom.cn/?time=2312234#/home這樣的,#之前的內容不再改變,路由只改變#之后的內容。
3、#后的字符
在第一個#后面出現的任何字符,都會被瀏覽器解讀為位置標識符。這意味着,這些字符都不會被發送到服務器端。
比如,下面URL的原意是指定一個顏色值:http://www.example.com/?color=#fff,但是,瀏覽器實際發出的請求是:
GET /?color= HTTP/1.1
Host: www.example.com
說明同上
4、改變#不觸發網頁重載
單單改變#后的部分,瀏覽器只會滾動到相應位置,不會重新加載網頁。
比如,從http://www.example.com/index.html#location1改成http://www.example.com/index.html#location2,瀏覽器不會重新向服務器請求index.html。
說明同第一個,例如單頁面應用SPA一樣,路由的切換,不會重新加載頁面,只是切換位置,或者切換組件;第二種應用就是在單個頁面里面通過name和id切換當前顯示的位置。
5、改變#會改變瀏覽器的訪問歷史
每一次改變#后的部分,都會在瀏覽器的訪問歷史中增加一個記錄,使用"后退"按鈕,就可以回到上一個位置。這對於ajax應用程序特別有用,可以用不同的#值,表示不同的訪問狀態,然后向用戶給出可以訪問某個狀態的鏈接。值得注意的是,上述規則對IE 6和IE 7不成立,它們不會因為#的改變而增加歷史記錄。
說明:通過#的切換,是算在瀏覽器的訪問歷史中的,前進和后退都是生效的。
6、onhashchange事件
這是一個HTML 5新增的事件,當#值發生變化時,就會觸發這個事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持該事件。
它的使用方法有三種:
window.onhashchange = func;
<body οnhashchange="func();">
window.addEventListener("hashchange", func, false);
對於不支持onhashchange的瀏覽器,可以用setInterval監控location.hash的變化。
說明:這是一個監聽事件,監聽#的變化,具體行為自定義完成。
二、?說明
1、連接作用
http://www.xxx.com/Show.asp?id=77&nameid=2905210001&page=1
通過?來帶參數,連接域名和參數,經常會用到。
2、清除緩存
http://www.xxxxx.com/index.html
http://www.xxxxx.com/index.html?test123123
兩個url打開的頁面一樣,但是后面這個有問號,說明不調用緩存的內容,而認為是一個新地址,重新讀取。
因為在做http請求的時候,如果瀏覽器檢測到你的地址完全沒變,會從緩存里讀取先前請求過的數據,不再發送請求。有些時候是頁面資源的加載,有些時候是API的get請求,都有可能。加上這個,會讓瀏覽器認為這是一個新的地址,從而保證重新獲取資源。
三、&說明
不同參數的間隔符