image.png

一个常见的完整的 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 用户信息

这是一个可选的参数,并且通常情况下会被应用程序丢弃,大多数浏览器会忽略这些信息或者警告您,因为它存在安全风险,一个通常使用的例子

ssh://[email protected]:2222

Host 主机

Host 可以是相同的系统、主机名、IP 地址或者域名

例子:

ldap://[2001:db8::10]/c=GB?objectClass?one

需要将 IPV 6 地址放入方括号中

https://ittavern.com/url-explained-the-fundamentals/
 
vnc://10/10/20/57:5900

Domains 域名

  • www.example.com - 完整的域名
  • www - 子域名
  • example - 二级域名 SDL
  • com - 顶级域名 TDL
  • . 跟域,不做解释

二级域名只能包含字母(a-z)、数字(0-9)和短横线(-),但不能以短横线开头。此外,域名不区分大小写,意味着 EXAMPLE.COMexample.com 是相同的。二级域名的最大长度为 63 个字符。子域名也遵循相同的规则,但还可以包含下划线(_)一般不建议使用。例如微软的 SRV DNS _sipfederationtls._tcp.example.com,浏览器可以接受,但是不能保证

Port 端口号

许多方案都有默认的端口号,允许大多数程序隐藏端口号,以免给用户带来困惑。

HTTP 的端口号是 80HTTPS 的端口号是 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 锚点来实现这一点

https://ittavern.com/url-explained-the-fundamentals/#fragments

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

查看原文