urllib.parse — 將 URL 解析為元件

原始碼: Lib/urllib/parse.py


此模組定義了一個標準介面,用於將統一資源定位符 (URL) 字串分解為各個元件(定址方案、網路位置、路徑等),將這些元件重新組合成一個 URL 字串,並根據“基本 URL”將“相對 URL”轉換為絕對 URL。

此模組旨在與關於相對統一資源定位符的網際網路 RFC 相匹配。它支援以下 URL 方案:fileftpgopherhdlhttphttpsimapitms-servicesmailtommsnewsnntpprosperorsyncrtsprtspsrtspusftpshttpsipsipssnewssvnsvn+sshtelnetwaiswswss

CPython 實現細節: 包含 itms-services URL 方案可能會阻止應用程式透過 Apple macOS 和 iOS App Store 的稽核流程。在 iOS 上,itms-services 方案的處理總是會被移除;在 macOS 上,如果 CPython 使用 --with-app-store-compliance 選項構建,則 可能 會被移除。

urllib.parse 模組定義的函式分為兩大類:URL 解析和 URL 引用。這些內容將在以下章節中詳細介紹。

此模組的函式使用了已棄用的術語 netloc(或 net_loc),該術語首次出現在 RFC 1808 中。然而,此術語已被 RFC 3986 廢棄,後者引入了術語 authority 作為其替代。出於向後相容性考慮,netloc 的使用仍在繼續。

URL 解析

URL 解析函式主要用於將 URL 字串拆分為其元件,或將 URL 元件組合成一個 URL 字串。

urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)

將 URL 解析成六個元件,返回一個包含 6 個元素的命名元組。這對應於 URL 的一般結構:scheme://netloc/path;parameters?query#fragment。每個元組項都是一個字串,可能為空。元件不會被分解成更小的部分(例如,網路位置是一個單一的字串),並且不會展開百分比轉義。如上所示的分隔符不屬於結果的一部分,除了路徑元件中的前導斜槓,如果存在則保留。例如

>>> from urllib.parse import urlparse
>>> urlparse("scheme://netloc/path;parameters?query#fragment")
ParseResult(scheme='scheme', netloc='netloc', path='/path;parameters', params='',
            query='query', fragment='fragment')
>>> o = urlparse("https://docs.python.club.tw:80/3/library/urllib.parse.html?"
...              "highlight=params#url-parsing")
>>> o
ParseResult(scheme='http', netloc='docs.python.org:80',
            path='/3/library/urllib.parse.html', params='',
            query='highlight=params', fragment='url-parsing')
>>> o.scheme
'http'
>>> o.netloc
'docs.python.org:80'
>>> o.hostname
'docs.python.org'
>>> o.port
80
>>> o._replace(fragment="").geturl()
'https://docs.python.club.tw:80/3/library/urllib.parse.html?highlight=params'

根據 RFC 1808 中的語法規範,urlparse 僅在網路位置由“//”正確引入時才識別它。否則,輸入被假定為相對 URL,因此以路徑元件開頭。

>>> from urllib.parse import urlparse
>>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
            params='', query='', fragment='')
>>> urlparse('www.cwi.nl/%7Eguido/Python.html')
ParseResult(scheme='', netloc='', path='www.cwi.nl/%7Eguido/Python.html',
            params='', query='', fragment='')
>>> urlparse('help/Python.html')
ParseResult(scheme='', netloc='', path='help/Python.html', params='',
            query='', fragment='')

scheme 引數給出預設定址方案,僅在 URL 未指定時使用。它應該與 urlstring 具有相同型別(文字或位元組),但預設值 '' 始終允許,並在適當時候自動轉換為 b''

如果 allow_fragments 引數為 false,則不識別片段識別符號。相反,它們被解析為路徑、引數或查詢元件的一部分,並且返回值中的 fragment 被設定為空字串。

返回值是一個命名元組,這意味著它的項可以透過索引或命名屬性訪問,這些屬性是

屬性

索引

如果不存在則返回的值

方案

0

URL 方案說明符

scheme 引數

網路位置

1

網路位置部分

空字串

路徑

2

分層路徑

空字串

引數

3

最後一個路徑元素的引數

空字串

查詢

4

查詢元件

空字串

片段

5

片段識別符號

空字串

使用者名稱

使用者名稱

None

密碼

密碼

None

主機名

主機名(小寫)

None

埠號(如果存在,為整數)

None

如果在 URL 中指定了無效埠,讀取 port 屬性將引發 ValueError。有關結果物件的更多資訊,請參見結構化解析結果部分。

netloc 屬性中不匹配的方括號將引發 ValueError

netloc 屬性中在 NFKC 規範化下(如 IDNA 編碼所用)分解為 /?#@: 任何字元都將引發 ValueError。如果在解析之前 URL 被分解,則不會引發錯誤。

與所有命名元組一樣,子類具有一些特別有用的附加方法和屬性。其中一個方法是 _replace()_replace() 方法將返回一個新的 ParseResult 物件,用新值替換指定的欄位。

>>> from urllib.parse import urlparse
>>> u = urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
>>> u
ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
            params='', query='', fragment='')
>>> u._replace(scheme='http')
ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
            params='', query='', fragment='')

警告

urlparse() 不執行驗證。詳細資訊請參閱URL 解析安全性

3.2 版本中已更改: 增加了 IPv6 URL 解析功能。

3.3 版本中已更改: 現在所有 URL 方案都解析片段(除非 allow_fragments 為 false),這符合 RFC 3986。此前,存在一個支援片段的方案白名單。

3.6 版本中已更改: 超出範圍的埠號現在會引發 ValueError,而不是返回 None

3.8 版本中已更改: 在 NFKC 規範化下影響 netloc 解析的字元現在會引發 ValueError

urllib.parse.parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace', max_num_fields=None, separator='&')

解析作為字串引數給出的查詢字串(application/x-www-form-urlencoded 型別的資料)。資料以字典形式返回。字典鍵是唯一的查詢變數名,值是每個名稱的值列表。

可選引數 keep_blank_values 是一個標誌,指示百分號編碼查詢中的空白值是否應被視為空字串。真值表示空白應保留為空字串。預設的假值表示應忽略空白值,並將其視為未包含在內。

可選引數 strict_parsing 是一個標誌,指示如何處理解析錯誤。如果為 false(預設),則靜默忽略錯誤。如果為 true,則錯誤會引發 ValueError 異常。

可選的 encodingerrors 引數指定如何將百分號編碼序列解碼為 Unicode 字元,這與 bytes.decode() 方法所接受的方式相同。

可選引數 max_num_fields 是要讀取的最大欄位數。如果設定,則如果讀取的欄位數超過 max_num_fields,則會引發 ValueError

可選引數 separator 是用於分隔查詢引數的符號。它預設為 &

使用 urllib.parse.urlencode() 函式(將 doseq 引數設定為 True)將此類字典轉換為查詢字串。

3.2 版本中已更改: 添加了 encodingerrors 引數。

3.8 版本中已更改: 添加了 max_num_fields 引數。

3.10 版本中已更改: 添加了 separator 引數,預設值為 &。Python 3.10 之前的版本允許使用 ;& 作為查詢引數分隔符。此行為已更改為僅允許單個分隔符鍵,預設分隔符為 &

自 3.14 版本棄用: 接受除空字串、位元組類物件和 None 之外的假值物件(如 0[])現已棄用。

urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace', max_num_fields=None, separator='&')

解析作為字串引數給出的查詢字串(application/x-www-form-urlencoded 型別的資料)。資料以名稱、值對列表的形式返回。

可選引數 keep_blank_values 是一個標誌,指示百分號編碼查詢中的空白值是否應被視為空字串。真值表示空白應保留為空字串。預設的假值表示應忽略空白值,並將其視為未包含在內。

可選引數 strict_parsing 是一個標誌,指示如何處理解析錯誤。如果為 false(預設),則靜默忽略錯誤。如果為 true,則錯誤會引發 ValueError 異常。

可選的 encodingerrors 引數指定如何將百分號編碼序列解碼為 Unicode 字元,這與 bytes.decode() 方法所接受的方式相同。

可選引數 max_num_fields 是要讀取的最大欄位數。如果設定,則如果讀取的欄位數超過 max_num_fields,則會引發 ValueError

可選引數 separator 是用於分隔查詢引數的符號。它預設為 &

使用 urllib.parse.urlencode() 函式將此類對列表轉換為查詢字串。

3.2 版本中已更改: 添加了 encodingerrors 引數。

3.8 版本中已更改: 添加了 max_num_fields 引數。

3.10 版本中已更改: 添加了 separator 引數,預設值為 &。Python 3.10 之前的版本允許使用 ;& 作為查詢引數分隔符。此行為已更改為僅允許單個分隔符鍵,預設分隔符為 &

urllib.parse.urlunparse(parts)

urlparse() 返回的元組構造一個 URL。parts 引數可以是任何六項可迭代物件。這可能會導致 URL 略有不同但等效,如果原始解析的 URL 具有不必要的分隔符(例如,帶空查詢的 ?;RFC 指出這些是等效的)。

urllib.parse.urlsplit(urlstring, scheme='', allow_fragments=True)

這與 urlparse() 類似,但不會將引數從 URL 中分離。如果需要更近的 URL 語法,允許將引數應用於 URL path 部分的每個片段(參見 RFC 2396),則通常應使用此函式而不是 urlparse()。需要一個單獨的函式來分離路徑片段和引數。此函式返回一個包含 5 個元素的命名元組

(addressing scheme, network location, path, query, fragment identifier).

返回值是一個命名元組,它的項可以透過索引或命名屬性訪問

屬性

索引

如果不存在則返回的值

方案

0

URL 方案說明符

scheme 引數

網路位置

1

網路位置部分

空字串

路徑

2

分層路徑

空字串

查詢

3

查詢元件

空字串

片段

4

片段識別符號

空字串

使用者名稱

使用者名稱

None

密碼

密碼

None

主機名

主機名(小寫)

None

埠號(如果存在,為整數)

None

如果在 URL 中指定了無效埠,讀取 port 屬性將引發 ValueError。有關結果物件的更多資訊,請參見結構化解析結果部分。

netloc 屬性中不匹配的方括號將引發 ValueError

netloc 屬性中在 NFKC 規範化下(如 IDNA 編碼所用)分解為 /?#@: 任何字元都將引發 ValueError。如果在解析之前 URL 被分解,則不會引發錯誤。

遵循更新 RFC 3986 的 WHATWG 規範 的某些部分,URL 中開頭的 C0 控制字元和空格字元將被剝離。URL 中任何位置的 \n\r 和製表符 \t 字元將被移除。

警告

urlsplit() 不執行驗證。詳細資訊請參閱URL 解析安全性

3.6 版本中已更改: 超出範圍的埠號現在會引發 ValueError,而不是返回 None

3.8 版本中已更改: 在 NFKC 規範化下影響 netloc 解析的字元現在會引發 ValueError

3.10 版本中已更改: ASCII 換行符和製表符從 URL 中去除。

3.12 版本中已更改: URL 中開頭的 WHATWG C0 控制字元和空格字元將被剝離。

urllib.parse.urlunsplit(parts)

urlsplit() 返回的元組元素組合成一個完整的 URL 字串。parts 引數可以是任何五項可迭代物件。這可能會導致 URL 略有不同但等效,如果原始解析的 URL 具有不必要的分隔符(例如,帶空查詢的 ?;RFC 指出這些是等效的)。

urllib.parse.urljoin(base, url, allow_fragments=True)

透過將“基本 URL”(base)與另一個 URL(url)組合來構造一個完整的(“絕對”)URL。非正式地,這使用基本 URL 的元件,特別是定址方案、網路位置和(部分)路徑,來提供相對 URL 中缺失的元件。例如

>>> from urllib.parse import urljoin
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html'

allow_fragments 引數與 urlparse() 的含義和預設值相同。

備註

如果 url 是一個絕對 URL(即,它以 //scheme:// 開頭),則 url 的主機名和/或方案將出現在結果中。例如

>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html',
...         '//python.club.tw/%7Eguido')
'https://python.club.tw/%7Eguido'

如果你不想這種行為,請使用 urlsplit()urlunsplit() 預處理 url,刪除可能的 schemenetloc 部分。

警告

由於絕對 URL 可以作為 url 引數傳入,因此使用攻擊者控制的 url 呼叫 urljoin 通常是 不安全 的。例如,在 urljoin("https://website.com/users/", username) 中,如果 username 可以包含一個絕對 URL,則 urljoin 的結果將是該絕對 URL。

3.5 版本中已更改: 行為已更新以匹配 RFC 3986 中定義的語義。

urllib.parse.urldefrag(url)

如果 url 包含片段識別符號,則返回一個不帶片段識別符號的修改版 url,並將片段識別符號作為單獨的字串。如果 url 中沒有片段識別符號,則返回未修改的 url 和一個空字串。

返回值是一個命名元組,它的項可以透過索引或命名屬性訪問

屬性

索引

如果不存在則返回的值

網址

0

不帶片段的 URL

空字串

片段

1

片段識別符號

空字串

有關結果物件的更多資訊,請參見結構化解析結果部分。

3.2 版本中已更改: 結果是一個結構化物件而不是簡單的 2-元組。

urllib.parse.unwrap(url)

從封裝的 URL 中提取 URL(即,格式為 <URL:scheme://host/path><scheme://host/path>URL:scheme://host/pathscheme://host/path 的字串)。如果 url 不是封裝的 URL,則原樣返回。

URL 解析安全性

urlsplit()urlparse() API 不執行輸入 驗證。它們可能不會對其他應用程式認為無效的輸入引發錯誤。它們也可能在其他地方可能不被視為 URL 的某些輸入上成功。

它們不是在異常輸入上引發異常,而是可能返回某些元件部分作為空字串。或者元件可能包含超出其應有的內容。

我們建議這些 API 的使用者,在返回的值可能在任何具有安全隱患的地方使用時,進行防禦性編碼。在信任返回的元件部分之前,在您的程式碼中進行一些驗證。該 scheme 有意義嗎?這是一個合理的 path 嗎?那個 hostname 有什麼奇怪之處嗎?等等。

URL 的構成並未普遍明確定義。不同的應用程式有不同的需求和期望約束。例如,當前的 WHATWG 規範 描述了面向使用者的 Web 客戶端(如 Web 瀏覽器)所需的內容。而 RFC 3986 更通用。這些函式結合了兩者的某些方面,但不能聲稱完全符合其中任何一個。API 和現有使用者程式碼對特定行為的期望早於這兩個標準,這使得我們對 API 行為的更改非常謹慎。

解析 ASCII 編碼位元組

URL 解析函式最初設計為僅對字串操作。實際上,能夠將正確引用和編碼的 URL 作為 ASCII 位元組序列進行操作是很有用的。因此,此模組中的所有 URL 解析函式除了 str 物件外,還對 bytesbytearray 物件進行操作。

如果傳入 str 資料,結果也將只包含 str 資料。如果傳入 bytesbytearray 資料,結果將只包含 bytes 資料。

嘗試在單個函式呼叫中混合 str 資料與 bytesbytearray 將導致引發 TypeError,而嘗試傳入非 ASCII 位元組值將觸發 UnicodeDecodeError

為了支援 strbytes 之間結果物件的輕鬆轉換,所有 URL 解析函式的返回值都提供了一個 encode() 方法(當結果包含 str 資料時)或一個 decode() 方法(當結果包含 bytes 資料時)。這些方法的簽名與相應的 strbytes 方法的簽名相同(除了預設編碼是 'ascii' 而不是 'utf-8')。每個方法都生成一個相應型別的值,其中包含 bytes 資料(對於 encode() 方法)或 str 資料(對於 decode() 方法)。

需要處理可能包含非 ASCII 資料的未正確引用的 URL 的應用程式,需要在使用 URL 解析方法之前自行將位元組解碼為字元。

本節所述行為僅適用於 URL 解析函式。URL 引用函式在生成或使用位元組序列時,將遵循其自己的規則,具體細節將在各個 URL 引用函式的文件中詳細說明。

3.2 版本中已更改: URL 解析函式現在接受 ASCII 編碼的位元組序列

結構化解析結果

來自 urlparse()urlsplit()urldefrag() 函式的結果物件是 tuple 型別的子類。這些子類添加了這些函式文件中列出的屬性、上一節中描述的編碼和解碼支援,以及一個附加方法

urllib.parse.SplitResult.geturl()

以字串形式返回原始 URL 的重新組合版本。這可能與原始 URL 略有不同,因為方案可能會規範化為小寫,並且空元件可能會被刪除。具體來說,空引數、查詢和片段識別符號將被刪除。

對於 urldefrag() 結果,只會刪除空的片段識別符號。對於 urlsplit()urlparse() 結果,所有註明的更改都將應用於此方法返回的 URL。

如果此方法的結果重新透過原始解析函式,則結果保持不變。

>>> from urllib.parse import urlsplit
>>> url = 'https://python.club.tw/doc/#'
>>> r1 = urlsplit(url)
>>> r1.geturl()
'https://python.club.tw/doc/'
>>> r2 = urlsplit(r1.geturl())
>>> r2.geturl()
'https://python.club.tw/doc/'

以下類提供了在操作 str 物件時結構化解析結果的實現

class urllib.parse.DefragResult(url, fragment)

包含 str 資料的 urldefrag() 結果的具體類。encode() 方法返回一個 DefragResultBytes 例項。

在 3.2 版本加入。

class urllib.parse.ParseResult(scheme, netloc, path, params, query, fragment)

包含 str 資料的 urlparse() 結果的具體類。encode() 方法返回一個 ParseResultBytes 例項。

class urllib.parse.SplitResult(scheme, netloc, path, query, fragment)

包含 str 資料的 urlsplit() 結果的具體類。encode() 方法返回一個 SplitResultBytes 例項。

以下類提供了在操作 bytesbytearray 物件時解析結果的實現

class urllib.parse.DefragResultBytes(url, fragment)

包含 bytes 資料的 urldefrag() 結果的具體類。decode() 方法返回一個 DefragResult 例項。

在 3.2 版本加入。

class urllib.parse.ParseResultBytes(scheme, netloc, path, params, query, fragment)

包含 bytes 資料的 urlparse() 結果的具體類。decode() 方法返回一個 ParseResult 例項。

在 3.2 版本加入。

class urllib.parse.SplitResultBytes(scheme, netloc, path, query, fragment)

包含 bytes 資料的 urlsplit() 結果的具體類。decode() 方法返回一個 SplitResult 例項。

在 3.2 版本加入。

URL 引用

URL 引用函式主要用於獲取程式資料並透過引用特殊字元和適當編碼非 ASCII 文字,使其可以安全地用作 URL 元件。它們還支援反轉這些操作,以從 URL 元件的內容重新建立原始資料(如果此任務尚未被上述 URL 解析函式涵蓋)。

urllib.parse.quote(string, safe='/', encoding=None, errors=None)

使用 %xx 轉義替換 string 中的特殊字元。字母、數字和字元 '_.-~' 永不引用。預設情況下,此函式旨在引用 URL 的路徑部分。可選的 safe 引數指定不應引用的附加 ASCII 字元 — 其預設值為 '/'

string 可以是 strbytes 物件。

3.7 版本中已更改: RFC 2396 遷移到 RFC 3986 以引用 URL 字串。“~”現在包含在非保留字元集中。

可選的 encodingerrors 引數指定如何處理非 ASCII 字元,其方式與 str.encode() 方法所接受的方式相同。encoding 預設為 'utf-8'errors 預設為 'strict',這意味著不支援的字元會引發 UnicodeEncodeError。如果 stringbytes,則不能提供 encodingerrors,否則會引發 TypeError

請注意 quote(string, safe, encoding, errors) 等同於 quote_from_bytes(string.encode(encoding, errors), safe)

示例:quote('/El Niño/') 得到 '/El%20Ni%C3%B1o/'

urllib.parse.quote_plus(string, safe='', encoding=None, errors=None)

類似於 quote(),但也將空格替換為加號,這是在構建用於 URL 的查詢字串時引用 HTML 表單值所必需的。原始字串中的加號會轉義,除非它們包含在 safe 中。它也沒有將 safe 預設為 '/'

示例:quote_plus('/El Niño/') 得到 '%2FEl+Ni%C3%B1o%2F'

urllib.parse.quote_from_bytes(bytes, safe='/')

quote() 類似,但接受 bytes 物件而不是 str,並且不執行字串到位元組的編碼。

示例:quote_from_bytes(b'a&\xef') 得到 'a%26%EF'

urllib.parse.unquote(string, encoding='utf-8', errors='replace')

用它們的單字元等效項替換 %xx 轉義。可選的 encodingerrors 引數指定如何將百分號編碼序列解碼為 Unicode 字元,這與 bytes.decode() 方法所接受的方式相同。

string 可以是 strbytes 物件。

encoding 預設為 'utf-8'errors 預設為 'replace',這意味著無效序列將替換為佔位符字元。

示例:unquote('/El%20Ni%C3%B1o/') 得到 '/El Niño/'

3.9 版本中已更改: string 引數支援位元組和字串物件(以前只支援字串)。

urllib.parse.unquote_plus(string, encoding='utf-8', errors='replace')

類似於 unquote(),但也將加號替換為空格,這是取消引用 HTML 表單值所必需的。

string 必須是 str

示例:unquote_plus('/El+Ni%C3%B1o/') 得到 '/El Niño/'

urllib.parse.unquote_to_bytes(string)

%xx 轉義替換為其單位元組等效項,並返回一個 bytes 物件。

string 可以是 strbytes 物件。

如果 stringstr,則 string 中未轉義的非 ASCII 字元將被編碼為 UTF-8 位元組。

示例:unquote_to_bytes('a%26%EF') 得到 b'a&\xef'

urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus)

將對映物件或兩元素元組序列(可能包含 strbytes 物件)轉換為百分號編碼的 ASCII 文字字串。如果生成的字串要用作 urlopen() 函式的 POST 操作的 data,則應將其編碼為位元組,否則會引發 TypeError

結果字串是一系列由 '&' 字元分隔的 key=value 對,其中 keyvalue 都使用 quote_via 函式進行引用。預設情況下,使用 quote_plus() 引用值,這意味著空格被引用為 '+' 字元,並且 '/' 字元被編碼為 %2F,這遵循 GET 請求的標準(application/x-www-form-urlencoded)。另一個可以作為 quote_via 傳遞的函式是 quote(),它將空格編碼為 %20 並且不編碼 '/' 字元。為了最大程度地控制引用內容,請使用 quote 併為 safe 指定一個值。

當兩元素元組序列用作 query 引數時,每個元組的第一個元素是鍵,第二個元素是值。值元素本身可以是一個序列,在這種情況下,如果可選引數 doseq 評估為 True,則對於鍵的值序列的每個元素,將生成由 '&' 分隔的單獨 key=value 對。編碼字串中引數的順序將與序列中引數元組的順序匹配。

safeencodingerrors 引數傳遞給 quote_viaencodingerrors 引數僅在查詢元素為 str 時傳遞)。

要反轉此編碼過程,此模組中提供了 parse_qs()parse_qsl(),用於將查詢字串解析為 Python 資料結構。

請參閱 urllib 示例,瞭解如何使用 urllib.parse.urlencode() 方法生成 URL 的查詢字串或 POST 請求的資料。

3.2 版本中已更改: query 支援位元組和字串物件。

3.5 版本中已更改: 添加了 quote_via 引數。

自 3.14 版本棄用: 接受除空字串、位元組類物件和 None 之外的假值物件(如 0[])現已棄用。

參見

WHATWG - URL 即時標準

URL 標準工作組,定義 URL、域名、IP 地址、application/x-www-form-urlencoded 格式及其 API。

RFC 3986 - 統一資源識別符號

這是當前的標準 (STD66)。對 urllib.parse 模組的任何更改都應符合此標準。可能會觀察到某些偏差,這主要是為了向後相容性以及主要瀏覽器中常見的某些事實上的解析要求。

RFC 2732 - URL 中 IPv6 字面地址的格式。

這指定了 IPv6 URL 的解析要求。

RFC 2396 - 統一資源識別符號 (URI):通用語法

描述統一資源名稱(URN)和統一資源定位符(URL)通用語法要求的文件。

RFC 2368 - mailto URL 方案。

mailto URL 方案的解析要求。

RFC 1808 - 相對統一資源定位符

這份請求評論(Request For Comments)包含了用於連線絕對URL和相對URL的規則,其中包括大量用於處理邊界情況的“異常示例”。

RFC 1738 - 統一資源定位符 (URL)

這規定了絕對URL的正式語法和語義。