在这篇文章中,我将尝试解释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从未被广泛采用。