URL HTML 統一資源定位器(Uniform Resource Locators)


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://host.domain:port/path/filename

說明:

    • 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請求,都有可能。加上這個,會讓瀏覽器認為這是一個新的地址,從而保證重新獲取資源。
三、&說明

不同參數的間隔符



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM