网址的组成部分有哪些?

大多数情况下,您可以提及“我购买了域名”或“我们的图片托管在其他网站上”之类的话,即使并非绝对正确也是如此。但在某些情况下,必须更精确。例如,在处理 Cookie 时,您需要了解“网站”和“来源”之间的区别。

网址部分的名称是在标准中指定的,该标准还定义了一个 JavaScript API:

  • 网址标准定义了网址和相关概念,以便工程师构建可互操作的网络浏览器。
  • 该标准的网址 API 组件定义了一些方法来提供对网址字符串中某些部分(例如 schemeorigin)的访问权限。

本文档介绍了一系列与 HTTP 或 HTTPS 网址字符串一起使用的术语。其中不涵盖其他类型的网址,例如文件或数据网址。对于 hostorigin 等术语,准确的定义本质上是复杂的,因此本文档提供了指向网址标准的示例和链接,而不是尝试提供完整的解释。

您可以使用 JavaScript 获取由 网址 API 定义的网址组成部分的名称。例如:

let url = new URL('https://foo.com.au:1234/bar/foo.html#bar');
console.log(url);

网址分析器

修改以下网址,了解网址字符串各部分是如何命名的。 您也可以在 url-parts.glitch.me 这个单独的标签页中打开此文件。


下面按字母顺序列出了网址部分的名称。

国家/地区代码顶级域名 (ccTLD)

ISO 3166-1 国家/地区代码列表中定义的顶级域名

  • 对于 https://example.org.au,ccTLD 为 au
  • 对于 https://example.io,ccTLD 为 io

域名

HTTP 或 HTTPS 网址中以英文句点分隔的部分:位于 scheme 之后、pathport(如果已指定)之前的所有内容。域名的每个部分称为一个标签

网址 域名
https://example.github.io/path example.github.io
https://support.example.org.au:443 support.example.org.au

有效顶级域名 (eTLD)

公共后缀列表中的条目,包括 TLD,以及以下域名(对于包含多个部分的 eTLD)中的其他域名:二级、三级等。

  • 例如:comcom.augithub.iosa.edu.auschools.nsw.edu.au

如这些示例所示,“公共后缀”是可以用来注册域名的名称。公共后缀列表是所有已知公共后缀的列表,会经常更新。包括 ChromiumFirefox 在内的浏览器会在其 build 中使用该列表。

eTLD+1

请参阅可注册域名

eTLD 及其之前的子网域。

  • 例如:example.comexample.org.auexample.github.ioexample.sa.edu.auexample.schools.nsw.edu.au

文件名

未在网址标准中定义,也不在网址 API 中,但基于网址直接映射到目录结构这一假设(通常不正确),通常用于引用网址的最终非路径部分。

例如,对于 https://example.com/dir/file.htmlfile.html 可能称为文件名。

如果资源已下载,浏览器也会使用文件名值来为其命名。 例如,https://example.com/images/image.jpg 通常会本地保存到 image.jpg

Fragment

一个字符串,位于网址末尾,后跟 # 字符,提供片段标识符

  • 例如:网址 https://example.com/cats#tabby 的片段标识符值为 tabby

包含 # 的部分称为哈希或锚点。您还可以链接到并突出显示某个文本片段

哈希值由网址 API 返回,而不是由片段返回。

完全限定域名 (FQDN)

网站或服务器的完整地址(映射到某个 IP 地址)。

网址 FQDN
https://example.com:1234/cats example.com
https://api.example.github.io api.example.github.io

即使使用的是非默认端口,网址的 FQDN 也不包含 port

哈希(或锚点)

网址末尾处跟着 # 字符的字符串,提供片段标识符(在某些上下文中,这称为“锚点”)。

排除 # 的部分称为 fragment。您还可以链接到并突出显示某个文本片段

哈希值由网址 API 返回,而不是由片段返回。

主机

网址标准中所定义,主机可以是域名、IP v4 地址、IPv6 地址、不透明主机或空主机。

  • 网址标准对 host 的定义不包含 port
  • URL.host 包含该端口,除非该端口是架构的默认端口。
  • URL.hostname 不包含端口。
网址 URL.host
https://www.example.com:443/cat www.example.com
// 443 is the default port for the scheme
https://www.example.com:1234/cat www.example.com:1234
https://cat.example.github.io cat.example.github.io

主机名

主机名由 JavaScript URL API 定义,而不是由网址标准在其他位置定义。如需了解详情,请参阅主机表示法

URL.hostname 返回不带端口主机

网址 URL.hostname
https://www.example.com:443/cat www.example.com
https://www.example.com:1234/cat www.example.com
https://cat.example.github.io cat.example.github.io

原点

网址标准会定义 origin,并链接到用于背景的 HTML 标准

对于 HTTP 或 HTTPS 网址,URL.origin 会返回架构、主机和端口(除非端口是架构的默认端口)。

网址 URL.origin
https://www.example.com:443/cat https://www.example.com
https://www.example.com:1234/cat https://www.example.com:1234
https://cat.example.github.io https://cat.example.github.io

参数

请参阅搜索参数

密码

请参阅 username

路径名

对于 HTTP 或 HTTPS 网址,该路径为网域和端口(如果已定义)后面的部分,包括文件名(如果已定义),但不包括搜索字符串哈希值

网址 URL.pathname
https://example.com [empty string]
https://example.com:8000/search?q=tabby /search
https://example.github.io/cat/pattern#tabby /cat/pattern
https://example.github.io/README.md /README.md

“Path”有时用于指代不带文件名的路径名。例如,对于网址 https://example.com/cat/pattern/tabby.html,“路径”为 /cat/pattern

端口

网址中 : 后面的数字,用于标识网络端口。例如:对于网址 https://example.com:1234/tabby,端口号为 1234。

端口号必须是 16 位无符号整数,也就是说,必须是 0 到 65,535 之间的整数(含 0 和 65,535)。

对于 HTTP 网址,默认端口为 80;对于 HTTPS,默认端口为 443。除非使用非默认端口,否则网址无需指定端口号。

如果端口是架构的默认端口,则 API 会返回空字符串。

网址 URL.port
https://example.com // empty string
https://example.com:443/foo // empty string: port is default for scheme
https://www.example.com:1234/foo 1234

协议

scheme 后跟 :(例如 http:https:)。

protocol 可通过 网址 API 获取,但 scheme 不能。

查询(或“查询字符串”)

网址的搜索部分,不包括前导 ?

可注册域名

  • 对于含有单个部分 eTLD(例如 comorg,即 eTLD,即与 TLD 对应的 eTLD)的网址,相应网址前面是域名,以及前面是二级域名的网址,例如 example.comexample.org
  • 对于具有两部分 eTLD 的网址,其中仅允许进行第三级注册(即公共后缀列表中的条目,例如 com.augithub.io)包含两部分顶级域名(“公共后缀”)和紧挨着该域名的第三级域名。例如:example.org.auexample.github.io
  • 对于包含三个或更多部分的 eTLD,该 eTLD 会显示其之前的域名。

方案

网址中的一部分(:// 之前),用于定义向网址发出请求时的网络协议(或用户代理要执行的操作)。例如,应使用 HTTPS 协议向采用 https 架构的网址发出请求。如果请求发送到采用 filemailtogit 等协议的网址,但该网址不对应任何网络协议,则行为取决于用户代理。例如,当用户点击 mailto 链接时,大多数浏览器会使用该链接的 href 网址中的值打开其默认电子邮件应用。

一个问号,后跟一系列键值对,表示参数及其值,在路径名后面提供。

网址 URL.search
https://example.com/cats?pattern=tabby&mood=bonkers ?pattern=tabby&mood=bonkers
https://example.com/cats:443?pattern=tabby ?pattern=tabby

query(即“查询字符串”)引用不含前导 ?search

另请参阅搜索参数

搜索参数

引用通过搜索字符串(或“查询字符串”)传递的数据项。

  • 例如:对于 https://example.com/cats?pattern=tabby&mood=bonkers,搜索字符串有两个参数:pattern=tabbymood=bonkers

二级域名

顶级域名位于顶级域名之前。

  • 对于网址 https://www.example.com,二级网域是 example.com,即顶级网域 com 的一个子网域。

  • 对于 https://example.org.au,顶级网域为 au,二级网域为 org,三级网域为 example。在此示例中,org.auau 的子网域,example.org.auorg.au 的子网域。

网站

网站由 HTML 标准以及同网站包含协议)和无协议同网站定义。

网站未在网址标准或 JavaScript 网址 API 中定义。

在这种情况下:

  • 对于具有单部分 eTLD(例如 https://example.com)的 HTTP 或 HTTPS 网址,网站包含 scheme、eTLD 和前面的标签。例如:对于网址 https://www.example.com/cat,网站为 https://example.com。(对于此网址,eTLD 与顶级域名相同)。
  • 对于多部分 eTLD(例如 co.ukgithub.iosa.edu.au),“网站”由 schemeeTLD 和其之前的标签组成。例如:对于网址 https://cat.example.co.uk/tabby,网站为 https://example.co.uk;对于 https://www.education.sa.gov.au,网站为 https://education.sa.gov.au
网址 网站(包含 scheme 和 eTLD +1)
https://cat.example.com/tabby (“https”、“example.com”)
https://cat.example.co.uk/tabby (“https”“example.co.uk”)

origin 不同,网站不包含 port

子网域

更高级别网域中的网域。

对于具有单部分顶级网域(例如 comorg)的网站,顶级网域之前的部分之间用英文句点分隔。

  • www.example.comexample.com 的子网域。
  • support.api.example.orgapi.example.org 的子网域,example.org 的子网域。

对于仅允许进行第三级注册的两部分 eTLD(即公共后缀列表中的条目,例如 co.ukgithub.io),子网域是域名之前的部分。

  • 例如:cat.example.co.ukexample.co.uk 的子网域。

文本片段

一种 fragment,可让用户链接到并突出显示页面内的一系列文本。当用户访问带有文本片段的链接时,浏览器会尝试查找、滚动至并突出显示页面中的文本。

文本片段以 :~:text= 开头,后跟搜索字词。

例如,如需链接到此页面上首次出现的“fragment”文本,请使用网址 https://web.dev/articles/url-parts#:~:text=fragment

如需了解详情,请参阅文本片段

顶级域名 (TLD)

根区域数据库中列出的域名,例如 comorg。某些顶级域名是国家/地区代码顶级域名,例如 uktv

在描述 HTTP 或 HTTPS 网址的各个部分时,TLD 是最后一个点之后的域名。

  • 对于 https://example.org,网址的顶级域名为 org
  • 对于 https://example.org.au,网址的顶级域名为 auorg二级网域(即使 org 也是顶级域名)。org.au 是一个由两部分组成的 eTLD

eTLD公共后缀列表包含具有一个、两个或多个部分的域名,因此 TLD 也可以是 eTLD。例如:

  • 对于 https://example.com,网址的 eTLD 是 com,这也是一个 TLD。

用户名

您可以在网址的开头提供可选的用户名和密码,但出于安全考虑,已弃用,在很多情况下,系统会将其忽略。

例如,对于 https://user123:password1@example.com,用户名为 user123。请注意,用户名(和密码)采用纯文本形式,未加密。 如果用户名包含 :@ 符号,它们的网址必须分别编码为 %3A%40


了解详情