但實際上,稱之為“URL”並不是特別準確。準確地說,應該叫URL。
那麽URL到底是什麽呢?不就是個網站嗎?
URL是英文Uniform Resource Locator的縮寫,即統壹資源定位符。它是壹種表示方法,用於指定信息在互聯網上的位置,通過它可以在互聯網上找到所需的資源。
雖然我們通常使用瀏覽器時,只要輸入Baidu.com或qq.com就可以正常上網,但實際上我們只輸入了整個URL的壹小部分。
來,我先來看看壹個相對完整的URL的整體結構。
這裏大致分為幾個部分。讓我們壹個壹個來看。他們到底是做什麽的?
圖中(中國)。美國。jp(日本)等。
壹級域名:例如,qq.com是壹個壹級域名,看起來非常簡潔,在頂級域名之前只有壹個單詞和短語。com。
二級域名:mail.qq.com和v.qq.com,前面加有字符串,如mail。和v,被稱為二級域名。
但是,域名只是壹串字符,計算機和路由器無法直接識別。還需要通過DNS服務器找到域名對應的IP地址,然後通過底層的TCP/IP協議路由到對應的機器上(這些內容不是本文的重點,我們先來挖坑)。
主機名是計算機的名稱。在局域網中,您可以通過主機名找到要訪問的計算機。主機名與域名相同。計算機和路由器不識別它。他們需要通過HOSTS file等技術找到主機名和ip地址之間的關系,最後將其轉換為IP地址後才能繼續發送網絡請求。
圖中的localhost也是壹個主機名,但壹個特殊的主機名是環回地址的標準主機名,這意味著機器本身的地址。
也可以直接用IP地址代替URL中的域名或主機名,比如192.168.0.1,關於IP地址的相關知識後面會講到(繼續挖坑)。
圖中冒號後的數字8080是端口號。壹臺服務器可以開放多個端口號,通常壹個網絡服務程序對應壹個端口號。
例如,我在機器A上打開了兩個服務程序,即Tomcat和SSH,並讓它們分別與端口8080和22相關聯。如果URL中的端口號是8080,則Tomcat程序將被訪問,22將與SSH服務連接。
但有些朋友可能會有疑問:咦,我平時在百度上看到的URL中沒有看到端口號。
其實是有的。端口號是80,但它是隱藏的,我們看不到它,而這個80端口是URL的默認端口號。
但並非所有URL都有默認端口號80。如果是這種協議,URL沒有文件名,但默認情況下服務器會為您定位特定的文件或程序。
從哪裏?#結束後,也就是圖中?uid=101。Ty=2是查詢參數。
查詢參數,也稱為URL參數和查詢字符串,英文稱為Query。它們用於將參數和壹些數據以字符串的形式傳輸到服務器。
參數形式通常以多個鍵值對的形式表示。例如,a=1和b=2是兩個鍵-值對,鍵是“A”和“B”,值是對應的“1”和“2”。多個鍵值對由& Connect: a = 1&表示;b=2
但是,壹些由參數傳遞的值通常具有特殊字符,這與URL標準的格式相沖突,例如a &;b,以及查詢參數&的鍵值對的連接器;沖突如果不加以區分,就會產生歧義。
最簡單的方法是對參數值進行編碼,這稱為URL編碼。通過編碼,壹個&;當b變成%26b時,它不再包含會發生沖突的特殊字符。
壹些參數即使有特殊字符也不會被編碼,除非它們自己編碼。例如,如果URL中的參數值是另壹個URL,則可以在這種特殊情況下寫入。不會有歧義,因為計算機系統識別出該參數是另壹個URL並將以URL的形式解析它,但是當子URL包含子參數和多個子鍵值對時,不可避免的是不清楚該參數是兒子的還是父親的。這時候強行編碼比較好。
URL的參數是鍵值對,即壹個鍵對應壹個值。如果壹個鍵必須傳遞多個值,即壹個列表,該怎麽辦?易於處理
URL的參數名稱可以重復,如a = 1 &;a = 2 & ampA=3,這裏完全有可能穿透三個名為A的查詢參數。您可以使用此功能按順序將1、2和3作為參數A的列表值。
為了表達更清楚,通常在列表參數名稱後加壹對方括號【】,如:a【】= 1 &;a【】= 2 & amp;a【】= 3
但是URL參數的編寫標準和格式沒有嚴格的規定,壹般支持上述形式。
圖中#abc之後的字符串部分是錨點部分。
Anchor在英語中稱為Reference,通常用於傳遞參數和其他信息,但與query參數的本質區別是這部分內容不會傳遞給服務器。
錨壹般用在頁面中。例如,在瀏覽網頁時,突然按下壹個按鈕可以幫助您定位頁面頂部或頁面中的某個位置。這是壹個錨。
現在,隨著前端分離技術的發展,特別是vue和reactjs等前端框架的發展,anchor作為前端javascript程序處理的參數載體變得越來越重要。
URL似乎是壹個已經習以為常的非常簡單的東西,其背後往往隱藏著許多技術細節和知識點。即使是這篇短文也不能窮盡。
其實URL內容有很多,比如@ & lt密碼》由於篇幅原因,在URL中這種用戶認證信息的傳輸沒有被提及。
所以我將在幾篇文章中解釋HTTP協議的幾個重要部分。如果這系列文章對妳有幫助的話,別忘了關註壹下哦~
最後,我想推薦壹個非常有用的Java端HTTP框架:Forest。
官方網站:
Gitee倉庫:/dt _ flys/forest
Github倉庫:/dromara/forest
這是壹個著名的HTTP框架,簡單易用,因為它涵蓋了所有臟活累活,如拼接URL、請求頭、請求體參數、等待響應、失敗重試以及將響應數據轉換為Java類型。