前端基础——URL详解
文章目錄
- 一:URL舉例
- 二:URL通用格式
- URL的語法:
- 通用格式:
- URL的分類:
- 絕對(duì)URL:
- 相對(duì)URL:
- 三:URL特殊字符
一:URL舉例
就以下面這個(gè)URL為例,介紹下普通URL的各部分組成
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的URL可以看出,一個(gè)完整的URL包括以下幾部分:
協(xié)議部分:該URL的協(xié)議部分為“http:”,這代表網(wǎng)頁(yè)使用的是HTTP協(xié)議。在Internet中可以使用多種協(xié)議,如HTTP,FTP等等本例中使用的是HTTP協(xié)議。在"HTTP"后面的“//”為分隔符
域名部分:該URL的域名部分為“www.aspxfans.com”。一個(gè)URL中,也可以使用IP地址作為域名使用
端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個(gè)URL必須的部分,如果省略端口部分,將采用默認(rèn)端口
虛擬目錄部分:從域名后的第一個(gè)“/”開始到最后一個(gè)“/”為止,是虛擬目錄部分。虛擬目錄也不是一個(gè)URL必須的部分。本例中的虛擬目錄是“/news/”
文件名部分:從域名后的最后一個(gè)“/”開始到“?”為止,是文件名部分,如果沒有“?”,則是從域名后的最后一個(gè)“/”開始到“#”為止,是文件部分,如果沒有“?”和“#”,那么從域名后的最后一個(gè)“/”開始到結(jié)束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個(gè)URL必須的部分,如果省略該部分,則使用默認(rèn)的文件名
錨部分:從“#”開始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個(gè)URL必須的部分
參數(shù)部分:從“?”開始到“#”為止之間的部分為參數(shù)部分,又稱搜索部分、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”。參數(shù)可以允許有多個(gè)參數(shù),參數(shù)與參數(shù)之間用“&”作為分隔符。
二:URL通用格式
URL的語法:
大多數(shù)URL語法都建立在9個(gè)部分構(gòu)成的通用格式上,而其中最重要的是方案(scheme)、主機(jī)(host)和路徑(path)
通用格式:
方案://用戶名:密碼@主機(jī)名:端口/服務(wù)器上資源的路徑;參數(shù)?查詢#片段
方案:指訪問服務(wù)器以獲取資源時(shí)要使用哪種協(xié)議。比如,http、https和FTP等
主機(jī)和端口:指資源宿主服務(wù)器的主機(jī)名或IP地址。端口是指資源宿主服務(wù)器正在監(jiān)聽的端口,很多HTTP的默認(rèn)端口號(hào)是80。比如,130.32.12.34:800,這里的IP地址是主機(jī)名,端口是800
用戶名和密碼:很多服務(wù)器都要求輸入用戶名和密碼才會(huì)允許用戶訪問數(shù)據(jù),如FTP服務(wù)器。
例子:joe是用戶名、joepasswd是密碼
ftp://joe:joepasswd@ftp.prep.edu/pub/name
路徑:路徑說明了資源位于服務(wù)器的什么地方。
例子:/cans/index.html就是URL中的路徑
http://www.hda.com/cans/index.html
參數(shù):為了向應(yīng)用程序提供它們所需要的輸入?yún)?shù),以便正確地與服務(wù)器進(jìn)行交互,URL中有個(gè)參數(shù)組件。由字符“;”將其與URL的其余部分分隔開來。
例子:;type=7;nam=true就是兩個(gè)參數(shù)。
ftp://prep.mit.edu/pub;type=7;nam=true
查詢:很多資源,比如數(shù)據(jù)庫(kù)服務(wù)、搜索引擎,都可以通過提問題或進(jìn)行查詢來縮小請(qǐng)求資源的范圍。由字符“?”將其與URL的其余部分分隔開來。
例子:查詢組件有兩個(gè)名/值對(duì):name=csh和age=24
http://www.cheng.cn/si.html?name=csh&age=24
片段:#代表網(wǎng)頁(yè)中的一個(gè)位置,其右面的字符就是該位置的標(biāo)識(shí)符(一般情況下,錨鏈接會(huì)用到)
例子:下面的URL中,代表網(wǎng)頁(yè)si.index的print位置,瀏覽器讀取這個(gè)URL后,會(huì)自動(dòng)將print位置滾動(dòng)至可視區(qū)域。
http://www.cheng.cn/si.html#print
URL的分類:
URL可以分為絕對(duì)URL和相對(duì)URL
絕對(duì)URL:
絕對(duì)URL中包含了訪問資源所需的全部信息。
案例:<a href=’http://cheng.com/si.html></a>
相對(duì)URL:
相對(duì)URL包含的只是訪問資源所需的部分信息。而要想得到訪問資源的全部信息的話,就要和另一個(gè)被稱為基礎(chǔ)(base)的URL結(jié)合進(jìn)行解析
案例:<script src="lib/sea.js"></script>
相對(duì)URL中的基礎(chǔ)URL:轉(zhuǎn)換相對(duì)URL的第一步就是找到基礎(chǔ)URL
在資源中顯式地指定基礎(chǔ)URL。比如,HTML文檔中可能會(huì)包含一個(gè)定義了基礎(chǔ)URL的HTML標(biāo)簽
封裝資源的基礎(chǔ)URL。在HTML中,基礎(chǔ)URL可以從它們所屬資源的基礎(chǔ)URL中推導(dǎo)出來
三:URL特殊字符
有些符號(hào)在URL中是不能直接傳遞的,如果要在URL中傳遞這些特殊符號(hào),那么就要使用他們的編碼了。編碼的格式為:%加字符的ASCII碼,即一個(gè)百分號(hào)%,后面跟對(duì)應(yīng)字符的ASCII(16進(jìn)制)碼值。例如 空格的編碼值是"%20"。
下表中列出了一些URL特殊符號(hào)及編碼
:替換為%3A
例:要傳遞字符串“this%is#te=st&o k?+/”作為參數(shù)t傳給te.asp,則URL可以是:
te.asp?t=this%25is%23te%3Dst%26o%20k%3F%2B%2F 或者
te.asp?t=this%25is%23te%3Dst%26o+k%3F%2B%2F (空格可以用%20或+代替)
java中URL 的編碼和解碼函數(shù)
java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);
在javascript 中URL 的編碼和解碼函數(shù)
escape(String s)和unescape(String s) ;
Java
中URL 的編碼和解碼函數(shù)
java
.NET
.URLEncoder.encode(String s)和java
.Net
.URLDecoder.decode(String s);
在
JavaScript
中URL 的編碼和解碼函數(shù)
escape(String s)和unescape(String s) ;
點(diǎn)的轉(zhuǎn)義:. ==> u002E
美元符號(hào)的轉(zhuǎn)義:$ ==> u0024
乘方符號(hào)的轉(zhuǎn)義:^ ==> u005E
左大括號(hào)的轉(zhuǎn)義:{ ==> u007B
左方括號(hào)的轉(zhuǎn)義:[ ==> u005B
左圓括號(hào)的轉(zhuǎn)義:( ==> u0028
豎線的轉(zhuǎn)義:| ==> u007C
右圓括號(hào)的轉(zhuǎn)義:) ==> u0029
星號(hào)的轉(zhuǎn)義:* ==> u002A
加號(hào)的轉(zhuǎn)義:+ ==> u002B
問號(hào)的轉(zhuǎn)義:? ==> u003F
反斜杠的轉(zhuǎn)義: ==> u005C
舉例:
我們需要模擬的地址為:
https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=en_US&=1453725386008,所以我們模擬的代碼如下:
#coding=utf8 import time, requests session = requests.Session() url = 'https://login.weixin.qq.com/jslogin' params = {'appid': 'wx782c26e4c19acffb','redirect_uri': 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage','fun': 'new','lang': 'en_US','_': int(time.time()),} r = session.get(url, params = params) print('Content: %s'%r.text)總結(jié)
以上是生活随笔為你收集整理的前端基础——URL详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html清理超链接前面的黑点,吹毛求疵:
- 下一篇: html canvas粒子线条组合动画背