URL解析-基本原理

在这篇文章中,我将尝试解释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必需的,但通常由应用程序隐藏,例如在浏览器中最常见的是httphttps,这是默认的并隐含的。

1
https:// ssh:// tel://

通常也称为“协议”,它是资源如何被访问的指示器。

URI方案名称的官方注册由IANAhttp://www.iana.org/assignments/uri-schemes上维护。IANA将显示从未注册的已注册和保留方案[1]。

RFC4395解释了注册程序并提供了一些指南。旧版本是RFC2717用于注册,RFC2718用于指南。

USERINFO

UserInfo是可选的,并且通常会被应用程序丢弃。大多数浏览器会忽略或警告该信息,因为这是一种安全风险。

一个通常使用它的示例:

1
ssh://username@example.com:2222

HOST

这是主机部分。它可以是相同的系统、主机名、IP或域。

示例:

1
2
3
ldap://[2001:db8::10]/c=GB?objectClass?one #必须将IPv6地址放入方括号中
https://ittavern.com/url-explained-the-fundamentals/
vnc://10.10.20.57:5900

DOMAINS

只是对域的简短偏离。

示例:

1
2
3
4
5
www.example.com #完整的域名
www #子域
example #二级域名(SDL)
com #顶级域名(TDL),也称为“域后缀”或“域扩展”。
. #参考:根区,

第二级域名必须只包含字母(a-z)、数字(0-9)和短划线('-'),但不能以短划线开头。此外,域是大小写不敏感的,这意味着ITTAVERN.COMittavern.com相同。第二级域名的最大长度为63个字符。子域名也受到相同规则的约束,但还可以包含下划线(_)-不建议使用,但某些服务要求使用。例如,Microsoft的一些SRV DNS _sipfederationtls._tcp.example.com`。浏览器可以接受它,但不能保证。

点之间的每个字符串称为标签,一个标签的最大长度为63个字符。完整域名的最大长度为253个字符,包括点。

目前已注册的TLD几乎有1500个。在创建本文时有1470个TLD,更具体地说。

1
2
3
4
5
kuser@pleasejustwork:〜$ curl https://data.iana.org/TLD/tlds-alpha-by-domain.txt | sed '1d' | wc -l
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9828 100 9828 0 0 11506 0 --:--:-- --:--:-- --:--:-- 11494
1470

所有TLD的列表可以在IANA的文档中找到。

TLD有两种类型 - 通用顶级域(gTLD).com .info .net和国家代码顶级域(ccTLD).nl .de .us以及一些组合如.co.uk.com.au

PORT

许多方案有一个默认端口号,允许大多数程序隐藏端口号以避免用户困惑。http的默认端口是80https的默认端口是443ssh的默认端口是22等等。相同的原则也适用于传输协议,例如TCPUDP。它们是必需的,但是如果使用默认端口,则大多数应用程序会隐藏它们,例如,如果使用的协议是https,则浏览器会隐藏:443并显示:10443

PATH

路径是子目录或子文件夹和文件的分层命名系统,从左到右,是必需的。与域不同,路径区分大小写!

示例:

1
2
3
https://ittavern.com/images/logo.png
https://ittavern.com/random-post/
https://duckduckgo.com #没有路径意味着根目录/

第一个示例指向一张图像,第二个示例中可能提示你注意文件丢失。浏览器将打开random-post子文件夹,Web服务器已配置为向浏览器提供预定义文件。这些文件通常称为index.html,但是这可能会因设置而异。这也称为“Pretty URLs”

QUERIES

携带可选参数,可以在服务器或客户端站点上使用。常见用例包括引用者信息、变量、选项设置等。参数之间的分隔符是&;

示例:

1
2
3
https://www.twitch.tv/randomstream1231?referrer=raid #在Twitch上显示观众来自何处
https://youtu.be/dQw4w9WgXcQ?t=4 #在YouTube上,它告诉客户端从哪里开始播放视频
https://youtu.be/dQw4w9WgXcQ?

URL

URL代表统一资源定位符,指定了已标识资源的位置以及访问该资源的机制。

URN

URN标识资源的唯一和持久名称,而无需任何位置。

示例:

1
2
3
urn:isbn:n-nn-nnnnnn-n #通过ISBN编号标识一本书
urn:uuid:39ab000da-3f9a-abe2-1337-123456789abc #全局唯一标识符
urn:publishing:book #标识文档为书籍类型的XML命名空间

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从未被广泛采用。