一个常见的完整的 URL 如下
https://username:[email protected]:443/path/to/page.html?query=file#fragment
通用的格式语法为:
URI = scheme ":" ["//" authority] path ["?" query] ["#" fragment]
URL 拆解
Schema
总是存在,但是不一定一直可见
schema 也被称为协议,用来标识资源访问的方式。
URL Schema 有一个官方注册表,由 IANA 维护,你可以在这里看到它们 Uniform Resource Identifier (URI) Schemes
除了这些官方的 Schema,一些产品在开发过程中也会自定义 Schema,例如 Obsidian,它们的 URL 协议为
app://obsidian.md
UserInfo 用户信息
这是一个可选的参数,并且通常情况下会被应用程序丢弃,大多数浏览器会忽略这些信息或者警告您,因为它存在安全风险,一个通常使用的例子
Host 主机
Host 可以是相同的系统、主机名、IP 地址或者域名
例子:
需要将 IPV 6 地址放入方括号中
Domains 域名
www.example.com
- 完整的域名www
- 子域名example
- 二级域名 SDLcom
- 顶级域名 TDL.
跟域,不做解释
二级域名只能包含字母(a-z)、数字(0-9)和短横线(-),但不能以短横线开头。此外,域名不区分大小写,意味着
EXAMPLE.COM
和example.com
是相同的。二级域名的最大长度为 63 个字符。子域名也遵循相同的规则,但还可以包含下划线(_)一般不建议使用。例如微软的 SRV DNS_sipfederationtls._tcp.example.com
,浏览器可以接受,但是不能保证
Port 端口号
许多方案都有默认的端口号,允许大多数程序隐藏端口号,以免给用户带来困惑。
HTTP 的端口号是 80
,HTTPS 的端口号是 443,SSH 的端口号是 22.
Path 路径
路径是一个层次化的命名系统,包含子目录或者子文件夹和文件,从左到右,并且是必须的。与域名不同的是,路径是区分大小写的
https://ittavern.com/images/logo.png
https://ittavern.com/random-post/
https://duckduckgo.com
- 路径缺失,但暗示根目录
Queries 查询
携带可在服务器或客户端使用的可选参数,常见的用例包括引荐信息、变量、选项设置等。参数之间的分隔符是 &
和 ;
https://www.twitch.tv/randomstream1231?referrer=raid
- 在 Twitch 上显示用户来自哪里https://youtu.be/dQw4w9WgXcQ?list=PLi9drqWffJ9FWBo7ZVOiaVy0UQQEm4IbP&t=9
- 在 Youtube 上它告诉客户端从哪里开始播放视频
Fragments 片段
Fragments 是资源特定位置的可选引用。例如在 HTML 中,可以使用 HTML 锚点来实现这一点
DIFFERENCE BETWEEN ABSOLUTE AND RELATIVE URL
绝对 URL 和相对 URL 之间的区别
到目前为止,每个 URL 都是绝对 URL,相对 URL 通常只是 Path,需要一个参考或者基本 URL 才能工作
URI、URL 和 URN 以及 URC 之间的区别
- URI - 统一资源标识符
- URL - 统一资源定位符
- URN - 统一资源名称
- URC - 统一资源符
URL 代表统一资源标识符,是一个用于识别任何事物的唯一字符串,并被 Web 技术所使用。 URL 可以用来识别逻辑或者物理上的任何信息,从地点和名称到概念和信息
URL 是 URI、URN 和 URC 的超集,例如每个 URL 都是一个 URI,但并非每个 URI 都是一个 URL。但是在实践中,URI 和 URL 经常可以互换使用。
不同的子集有不同的作用,URN 用于标识一个项目,URL 告诉您如何定位和访问一个项目,URC 指向该项目的特定元数据。
URN
通过唯一且持久的名称标识资源,不包含任何位置信息。
Example:
urn:isbn:n-nn-nnnnnn-n
: 通过 ISBN 码来识别一本书urn:uuid:39ab000da-3f9a-abe2-1337-123456789abc
: 全局唯一标识符urn:publishing:book
: 一个 XML 命名空间,用于标识改文档是一本书籍类型
每个 URN 应该具有以下结构
- URN - Schema 规范前缀
- NID - namespace 命名空间标识符(字母、数字、破折号)
- NSS - namespace 特定的字符串,用于标识资源,可以包含 ASCII 码、数字、标点符号和特殊字符
URC
一个 URC 指向资源的元数据,而不是资源本身,一个快速的列子是一个 URC 指向一个主页的源代码
view-source:http://example.com/
但是从未制定出最终版标准,且 URC 从未被广泛使用。