绝对URL、相对URL以及……?

39

我正在撰写一些文档,但有一个词汇问题:

  1. http://www.example.com/en/public/img/logo.gif 被称为“绝对”url,对吗?
  2. ../../public/img/logo.gif 被称为“相对”url,对吗?
  3. 那么你如何称呼这个:/en/public/img/logo.gif ?

它是否也被认为是"绝对URL",虽然没有协议和域名部分?

还是说它被认为是相对的 URL,但是相对于域名的根目录?

我谷歌搜索了一下,有些人将其归类为绝对,而另一些人则归类为相对。

我应该怎么称呼它?"半绝对URL" 吗?或者 "半相对"?还有其他词汇吗?

6个回答

82

以下是URL组件:

http://www.example.com/en/public/img/logo.gif
\__/   \_____________/\_____________________/
 #1     #2             #3
  1. scheme/protocol
  2. host
  3. path

如果一个URL以scheme和具体的scheme部分(即在http:后面的//)开头,则称其为绝对URL。其他任何URL都是相对URL

如果一个URL路径以/开头,则称其为绝对URL路径。其他任何URL路径都是相对URL路径

因此:

  • http://www.example.com/en/public/img/logo.gif 是一个绝对URL
  • ../../public/img/logo.gif 是一个带有相对URL路径相对URL
  • /en/public/img/logo.gif 是一个带有绝对URL路径相对URL

注意:当前的URI定义(RFC 3986)与旧的URL定义(RFC 1738RFC 1808)不同。

以下是三个包含URI术语的示例:

  • http://www.example.com/en/public/img/logo.gif 是一个URI
  • ../../public/img/logo.gif 是一个仅带有相对路径相对引用
  • /en/public/img/logo.gif 是一个仅带有绝对路径相对引用

我不确定我是否正确理解了。这是否意味着 //yolo.com 被认为是绝对 URL? - srph
@srph 不是的。只有以协议/方案开头的才被认为是绝对的。 - Gumbo
但是浏览器似乎可以正确解析它。例如,//yolo.com会在当前页面方案的前面添加。是否有任何特定术语、rfc或原因,解释为什么在浏览器中以“//”开头的URL被解析为绝对路径? - srph
1
@srph 相对 URL 始终根据它们所用的上下文解析为绝对 URL。请查看 RFC 3986 的第 5 节:参考解析 获取更多信息。 - Gumbo
不错的回答,但在日常对话(或用户友好的文档)中,谁会总是把它称为“具有绝对路径的相对引用”?MDN通常是一个可靠的来源,但是他们称之为带有“隐式域名”的“绝对URL”,这甚至更糟。就我所知,这些被称为根相对链接已经很长时间了。意思很清楚(它相对于根),而且说起来也容易得多。 - Kal
RFC 3986中使用的实际语言略有不同:以两个斜杠字符开头的相对引用被称为网络路径引用;这样的引用很少使用。以单个斜杠字符开头的相对引用被称为绝对路径引用。不以斜杠字符开头的相对引用被称为相对路径引用。 - undefined

7

我见过它被称为根相对URL。


1
惊讶于这个答案在11年中只得到了一个投票!如果我正在编写用户友好的文档,那就是我要称呼它的。 - Kal

2

从微软有关绝对URL和相对URL的文档中:

一个URL指定了本地或网络计算机上存储的目标的位置。目标可以是文件、目录、HTML页面、图像、程序等。
绝对URL包含了定位资源所需的所有信息。
相对URL使用绝对URL作为起点来定位资源。实际上,通过连接绝对和相对URL来指定目标的“完整URL”。
绝对URL使用以下格式:scheme://server/path/resource 相对URL通常只包括路径,可选地包括资源,但不包括协议和服务器。以下表定义了完整URL格式的各个部分。
- scheme - 指定如何访问资源。 - server - 指定资源所在计算机的名称。 - path - 指定导致目标的一系列目录。如果省略资源,则目标是路径中的最后一个目录。 - resource - 如果包括,则resource是目标,通常是文件名。它可以是一个简单的文件,包含一个二进制流,或者是一个结构化文档,包含一个或多个存储和二进制流。

0

有时被称为虚拟 URL,例如在SSI中:

<!--#include virtual = "/lib/functions.js" -->

0

请记住,URL 中有多少段可以被省略,使它们成为相对路径(注意:几乎所有的都可以)。以下都是有效的 URL:

  • http://example.com/bar?baz
  • ?qoo=qalue
  • /bar2
  • dat/sly
  • //auth.example.com(大多数人对此感到惊讶!会根据当前资源使用 http 或 https)
  • #anchor

0

是的,有两种类型的相对URL:具有相对路径的相对URL和具有绝对路径的相对URL。

(1) 具有相对路径的相对URL = 相对于当前页面的URL。需要链接的文件或资源位于同一网站内。

例如,您在 https://example.com/items/menu.html 上。

您想要链接到与当前页面相同目录中的 images 文件夹中的图像文件,则应使用相对URL src="images/myimage.jpg"

结果的URL将为:https://example.com/items/images/myimage.jpg。这是因为,在 src="images/myimage.jpg" 中不加入 / 之前的 images,您告诉浏览器 images 文件夹位于与 menu.html 文件相同的目录中。

想象一下,在 example.com 文件夹内,有一个 items 文件夹,里面有一个 images 文件夹和一个 menu.html 文件。

因此,它将从https://example.com/items/menu.html更改为https://example.com/items/images/myimage.jpg,原因是当您在images之前不加/时,images文件夹和menu.html位于同一级别。就是这样!

(2) 具有绝对路径的相对URL=指定从网站根目录开始的完整路径的URL。

例如,您再次在https://example.com/items/menu.html上。

您在网站的根目录中有一个images文件夹。 P/s:根目录是https://example.com/

您想链接到根文件夹中的图像文件,您将使用具有绝对路径的相对URLsrc="/images/myimage.jpg"。请注意,在images之前有/以指定其相对于根目录。

生成的URL将是:https://example.com/images/myimage.jpg。它将从https://example.com/items/menu.html变为https://example.com/images/myimage.jpg,因为images文件夹位于根目录下。就是这样!

(3) 简而言之,

您正在访问https://example.com/items/menu.html

如果您使用src="images/myimage.jpg",生成的URL将是https://example.com/items/images/myimage.jpg

如果您使用src="/images/myimage.jpg",生成的URL将是https://example.com/images/myimage.jpg


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接