什么是根目錄文件夾 什么是根目錄( 二 )


文件名從域名后開始算起的最后一個斜杠/開始 , 到?為止 , 沒有?則到#為止 , 或者?和#都沒有就是到整個URL結束為止的那部分就為文件名
說起來很繞吧 , 其實就是圖中 info.do 這部分 , 它一般包含文件名和擴展名('.'后面那部分) , 用來指代一個URL所訪問的具體文件或資源 , 它可以是圖片、html文件、css文件 , 也可以是js文件、字體文件等等 , 它也可以不是某種文件 , 而是服務端后臺執行的某段程序 。
甚至可以省略不寫虛擬目錄和文件名 , 因為它們本來就不是必須的 , 就如http://www.baidu.com這樣的URL就沒有文件名 , 但服務器會在缺省的情況下給你定位到某個特定的文件或程序上去 。
查詢參數從?后到#結束 , 即圖中的?uid=101&ty=2為查詢參數
查詢參數 , 也稱為URL參數、查詢字符串 , 英文名為 Query , 它是用來向服務端以字符串的形式傳遞參數和少數數據用的
其參數形式一般都以多個鍵值對的形式進行表示 , 如 a=1、b=2就是兩個鍵值對 , 鍵為"a"和"b" , 值為對應的"1"和"2", 多個鍵值對應&連起來:a=1&b=2
URL編碼但參數要傳遞的某些值往往帶有特殊字符 , 這些字符和URL標準的格式沖突 , 比如要傳a&b這樣字符串 , 和查詢參數鍵值對的連接符&沖突了 , 若不加以區分就會產生歧義
而最簡單的辦法 , 就是對參數值進行編碼 , 稱為 URL Encoding , 通過編碼 , a&b變成了a%26b , 就不再包含會沖突的特殊字符
而有些參數即便有特殊字符 , 也不會被編碼 , 除非自行強制編碼 , 比如URL中參數值是另外一串URL , 就可以寫成 http://localhost/do?url=http://www.baidu.com這種特殊情況不會有歧義 , 因為計算機系統認得出參數是另一串URL , 就會按URL的形式來解析 , 但當子URL又包含子參數和多子鍵值對的時候也難免會分不清參數到底是兒子的還是父親的 , 這時還是強制編碼的好
列表參數URL的參數是一個個鍵值對 , 即一個key對應一個value , 那如果是一個key要傳遞多個值 , 也就是一個列表咋辦?也好辦
URL的參數名是可以重復的 , 比如a=1&a=2&a=3,這里穿了3個參數名都為a的查詢參數 , 是完全可以的 , 可以利用這種特性 , 按順序將 1、2、3作為參數a的列表值
為了表示更清楚點 , 一般都會在列表參數名后面加上一對方括號[] , 如:a[]=1&a[]=2&a[]=3
但是 , 對于URL參數的寫法和格式的標準 , 也沒有特別嚴格的規定 , 以上幾種形式一般都會支持
錨圖中#后面那部分字符串 , #abc就是錨部分
錨 , 英文稱做Reference , 通常也是用來傳遞參數等信息 , 但與查詢參數的本質區別就是這部分內容不會被傳遞到服務器端
錨一般用于頁面 , 比如在瀏覽網頁的時候 , 按個按鈕突然幫你定位到頁首或頁面中的某個位子去了 , 這就是錨
現在隨著前后端分離技術 , 尤其是 vue、reactjs 等前端框架的興起 , 錨作為前端javascript程序處理的參數載體也越來越重要了
結語URL看似已經習以為常、非常簡單的東西 , 背后往往也隱藏著很多技術細節和知識點 , 甚至這短短一篇文章也沒辦法窮盡
【什么是根目錄文件夾什么是根目錄】其實URL的內容還有不少 , 比如<用戶名>@<密碼>這種用戶驗證信息在URL中的傳遞 , 由于篇幅的關系還沒有講到
所以我講分幾篇文章來講解HTTP協議的其中幾個重要部分 , 如果這一系列文章對你有幫助 , 別忘了關注哦~

推薦閱讀