urllib.parse — 將 URL 解析為元件

原始碼: Lib/urllib/parse.py


此模組定義了一個標準介面,用於將統一資源定位符 (URL) 字串分解為元件(定址方案、網路位置、路徑等),將元件重新組合為 URL 字串,以及在給定“基本 URL”的情況下將“相對 URL”轉換為絕對 URL。

該模組的設計符合網際網路關於相對統一資源定位符的 RFC。它支援以下 URL 方案:file, ftp, gopher, hdl, http, https, imap, itms-services, mailto, mms, news, nntp, prospero, rsync, rtsp, rtsps, rtspu, sftp, shttp, sip, sips, snews, svn, svn+ssh, telnet, wais, ws, wss

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。 每個元組專案都是一個字串,可能為空。 這些元件不會被分解為更小的部分(例如,網路位置是單個字串),並且不會展開 % 轉義符。 上面顯示的定界符不是結果的一部分,除了 path 元件中的前導斜槓(如果存在則保留)。 例如

>>> 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 中的語法規範,僅當 netloc 由“//”正確引入時,urlparse 才會識別 netloc。 否則,輸入將被假定為相對 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 將設定為空字串。

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

屬性

索引

如果不存在則取值

scheme

0

URL 方案說明符

scheme 引數

netloc

1

網路位置部分

空字串

path

2

分層路徑

空字串

params

3

最後一個路徑元素的引數

空字串

query

4

查詢元件

空字串

fragment

5

片段識別符號

空字串

username

使用者名稱

None

password

密碼

None

hostname

主機名(小寫)

None

port

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

None

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

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

在 NFKC 規範化(IDNA 編碼使用)下分解為 /, ?, #, @: 中任何一個的 netloc 屬性中的字元,將引發 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 版本更改: 現在,根據 RFC 3986,所有 URL 方案都會解析片段(除非 allow_fragments 為 false)。以前,存在一個支援片段的方案的允許列表。

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 是一個標誌,指示是否應將百分比編碼查詢中的空白值視為空白字串。真值表示應將空白保留為空白字串。預設的 false 值表示應忽略空白值,並將其視為未包含。

可選引數 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 的 Python 版本允許同時使用 ;& 作為查詢引數分隔符。這已更改為僅允許單個分隔符鍵,預設分隔符為 &

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 是一個標誌,指示是否應將百分比編碼查詢中的空白值視為空白字串。真值表示應將空白保留為空白字串。預設的 false 值表示應忽略空白值,並將其視為未包含。

可選引數 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 的 Python 版本允許同時使用 ;& 作為查詢引數分隔符。這已更改為僅允許單個分隔符鍵,預設分隔符為 &

urllib.parse.urlunparse(parts)

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

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).

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

屬性

索引

如果不存在則取值

scheme

0

URL 方案說明符

scheme 引數

netloc

1

網路位置部分

空字串

path

2

分層路徑

空字串

query

3

查詢元件

空字串

fragment

4

片段識別符號

空字串

username

使用者名稱

None

password

密碼

None

hostname

主機名(小寫)

None

port

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

None

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

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

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

遵循更新 RFC 3986 的一些 WHATWG 規範,URL 中會刪除前導 C0 控制字元和空格字元。\n\r 和製表符 \t 字元會從 URL 的任何位置刪除。

警告

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

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

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

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

3.12 版本更改: 從 URL 中刪除了前導 WHATWG C0 控制字元和空格字元。

urllib.parse.urlunsplit(parts)

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

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 引數傳遞,因此將 urljoin 與攻擊者控制的 url 一起使用通常是不安全的。例如,在 urljoin("https://website.com/users/", username) 中,如果 username 可以包含絕對 URL,則 urljoin 的結果將是絕對 URL。

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

urllib.parse.urldefrag(url)

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

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

屬性

索引

如果不存在則取值

url

0

沒有片段的 URL

空字串

fragment

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 解析函式都可以在 bytesbytearray 物件以及 str 物件上執行。

如果傳入 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 字串。“~”現在包含在未保留字元集中。

可選的 *encoding* 和 *errors* 引數指定如何處理非 ASCII 字元,如 str.encode() 方法所接受的。*encoding* 預設為 'utf-8'。*errors* 預設為 'strict',這意味著不支援的字元會引發 UnicodeEncodeError。如果 *string* 是 bytes,則不得提供 *encoding* 和 *errors* ,否則會引發 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 物件。

如果它是 str,則 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 對,其中 *key* 和 *value* 都使用 quote_via 函式進行引用。預設情況下,quote_plus() 用於引用值,這意味著空格被引用為 '+' 字元,而 '/' 字元被編碼為 %2F,這符合 GET 請求的標準 (application/x-www-form-urlencoded)。可以作為 quote_via 傳遞的替代函式是 quote(),它會將空格編碼為 %20 並且不編碼 '/' 字元。為了最大程度地控制引用的內容,請使用 quote 併為 safe 指定一個值。

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

safeencodingerrors 引數將傳遞給 quote_via(僅當查詢元素是 str 時才傳遞 encodingerrors 引數)。

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

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

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

在 3.5 版本中變更: 添加了 quote_via 引數。

參見

WHATWG - URL Living standard

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 的正式語法和語義。