在这篇文章中,我将尝试解释URL的语法和用法,以及URI、URL、URN和URC之间的区别。
URL解析
这将是我们本文的示例:
1 | https://username:password@www.example.com:443/path/to/page.html?query=file#fragment |
这个URL
的格式是建立在URI通用语法之上的,看起来像这样[2]:
1 | URI = scheme ":" ["//" authority] path ["?" query] ["#" fragment] |
注意,“authority”
可以具有以下语法:
1 | authority = [userinfo "@"] host [":" port] |
URI SCHEME
URI SCHEME必需的
,但通常由应用程序隐藏,例如在浏览器中最常见的是http
或https
,这是默认的并隐含的。
1 | https:// ssh:// tel:// |
通常也称为“协议”,它是资源如何被访问的指示器。
URI方案名称的官方注册由IANA
在http://www.iana.org/assignments/uri-schemes
上维护。IANA
将显示从未注册的已注册和保留方案[1]。
RFC4395
解释了注册程序并提供了一些指南。旧版本是RFC2717
用于注册,RFC2718
用于指南。
USERINFO
UserInfo
是可选的,并且通常会被应用程序丢弃。大多数浏览器会忽略或警告该信息,因为这是一种安全风险。
一个通常使用它的示例:
1 | ssh://username@example.com:2222 |
HOST
这是主机部分。它可以是相同的系统、主机名、IP
或域。
示例:
1 | ldap://[2001:db8::10]/c=GB?objectClass?one #必须将IPv6地址放入方括号中 |
DOMAINS
只是对域的简短偏离。
示例:
1 | www.example.com #完整的域名 |
第二级域名必须只包含字母(a-z)
、数字(0-9
)和短划线('-')
,但不能以短划线开头。此外,域是大小写不敏感的,这意味着ITTAVERN.COM
与ittavern.com
相同。第二级域名的最大长度为63个字符。子域名也受到相同规则的约束,但还可以包含下划线(_)
-不建议使用,但某些服务要求使用。例如,Microsoft
的一些SRV DNS
_sipfederationtls._tcp.example.com`。浏览器可以接受它,但不能保证。
点之间的每个字符串称为标签,一个标签的最大长度为63
个字符。完整域名的最大长度为253
个字符,包括点。
目前已注册的TLD
几乎有1500个。在创建本文时有1470个TLD
,更具体地说。
1 | kuser@pleasejustwork:〜$ curl https://data.iana.org/TLD/tlds-alpha-by-domain.txt | sed '1d' | wc -l |
所有TLD
的列表可以在IANA
的文档中找到。
TLD
有两种类型 - 通用顶级域(gTLD)
如.com .info .net
和国家代码顶级域(ccTLD)
如.nl .de .us
以及一些组合如.co.uk
或.com.au
。
PORT
许多方案有一个默认端口号,允许大多数程序隐藏端口号以避免用户困惑。http
的默认端口是80
,https
的默认端口是443
,ssh
的默认端口是22
等等。相同的原则也适用于传输协议,例如TCP
或UDP
。它们是必需的,但是如果使用默认端口,则大多数应用程序会隐藏它们,例如,如果使用的协议是https
,则浏览器会隐藏:443
并显示:10443
。
PATH
路径是子目录或子文件夹和文件的分层命名系统,从左到右,是必需的。与域不同,路径区分大小写!
示例:
1 | https://ittavern.com/images/logo.png |
第一个示例指向一张图像,第二个示例中可能提示你注意文件丢失。浏览器将打开random-post
子文件夹,Web
服务器已配置为向浏览器提供预定义文件。这些文件通常称为index.html
,但是这可能会因设置而异。这也称为“Pretty URLs”
。
QUERIES
携带可选参数,可以在服务器或客户端站点上使用。常见用例包括引用者信息、变量、选项设置等。参数之间的分隔符是&
和;
。
示例:
1 | https://www.twitch.tv/randomstream1231?referrer=raid #在Twitch上显示观众来自何处 |
URL
URL
代表统一资源定位符,指定了已标识资源的位置以及访问该资源的机制。
URN
URN
标识资源的唯一和持久名称,而无需任何位置。
示例:
1 | urn:isbn:n-nn-nnnnnn-n #通过ISBN编号标识一本书 |
isbn - 如第一个示例中所示 - 是URN命名空间标识符(NID),而不是URN方案或URI方案 。有人提到,有些人会将NID(请参见以下列表)称为URI方案,相当于URL,这是不正确的。
每个URN
应具有以下结构:
- URN #方案规范前缀。
- NID #命名空间标识符(字母、数字、破折号)
- NSS #标识资源的特定于命名空间的字符串(可以包含ASCII码、数字、标点符号和特殊字符)
URC
URC
代表统一资源特征或统一资源引用。根据维基百科,前者是当前使用的名称。
URC
指向资源的元数据,而不是资源本身。一个快速示例是指向主页源代码的URC
:
1 | view-source:http://example.com/ |
URC
从未产生最终标准,并且URC
从未被广泛采用。