什么是绝对URL(完全限定)的定义?

35

至少有三种方法可以链接到资源:

  1. href="foo/bar.html"
  2. href="/foo/bar.html"
  3. href="http://example.com/foo/bar.html"

第一种是“相对URL”,没问题。但我看到(2)和(3)都被称为“绝对URL”。哪个才是正确的“绝对URL”,另一个的正确名称是什么?

(如有相关标准或官方文档的参考资料,可获得额外积分。)

7个回答

50

RFC 3986 定义了统一资源标识符。

以单斜杠字符开头的相对引用称为绝对路径引用。不以斜杠字符开头的相对引用称为相对路径引用。

  1. href="foo/bar.html" 是一个相对引用,具体来说是一个 相对路径引用
  2. href="/foo/bar.html" 是一个带有绝对路径的相对引用。
  3. href="http://example.com/foo/bar.html" 是一个 绝对URI
  4. href="//example.com/foo/bar.html" 是一个网络路径引用

以两个斜杠字符开头的相对引用称为网络路径引用;这样的引用很少使用。


4
对于第四点,我同意它们很少使用,但我认为它们有非常好的用途。任何同时在HTTP和HTTPS上托管的内容都会受益于此-在不需要时避免HTTPS的开销,在安全页面上使用它以避免浏览器警告。CDN上托管的脚本是一个很好的例子:([参见此帖子](https://dev59.com/qHA65IYBdhLWcg3wzyBl#3622615))。 - Joe Enos
2
@JoeEnos 我同意你的观点;那是RFC中的直接引用。 - Jacob Krall
4
有趣的是仅仅四年后,“网络路径引用”在 CDN 脚本引用中变得非常普遍。 - Scott Stafford

4

绝对URL包含大量信息,这些信息可能已经从基础文档的检索上下文中知道,包括方案、网络位置和URL路径的部分。

https://www.rfc-editor.org/rfc/rfc1808

数字(2)是绝对路径,数字(3)是绝对URL。


2
我喜欢W3提供的这里描述 URL 的定义:

如果解析一个URL,无论相对于什么解析,结果总是一致且不会失败,则该URL为绝对URL。

该说明未涉及方案、路径或其他概念,但基本上表明相同的输入始终产生相同的输出。从开发者的角度来看,即使在您的世界是网站时, #2 仍然是绝对的。例如,//example.com/foo/bar.html 是方案时,它也是绝对的。我认为在这些情况下,“绝对”这个词仍然有意义。

2

我听说 #2 的术语是 "根相对路径"。我认为这是一个有用的定义,因为它的意思在措辞上很清晰,并且很容易区分于 #1 和 #3。


1

RFC 3986URI通用语法)在第4.3节绝对URI中规定以下规则:

absolute-URI = scheme ":" hier-part [ "?" query ]

因此,#2不是绝对URI。


1
我认为(2)也是相对URL,而(3)是绝对URL。 http://kb.iu.edu/data/abwp.html显示了一些例子。
http://www.wisegeek.com/what-is-an-absolute-url.htm上,它解释如下:
“绝对URL提供完整的位置信息。它以http://开头并继续包括每个细节。这意味着,如果网站管理员更改原始文件的位置,绝对URL规范将找到该图像,而相对URL规范则不会。”

我相信你的基本观点是正确的,但像这样的二手参考资料往往容易导致FUD,这就是为什么我要求提供权威来源的参考资料。 - Scott Stafford

1
只有 #3 符合绝对 URL 的定义。1 和 2 是相对 URL。
相对 URL(在 [RFC1808] 中定义)不包含任何协议或机器信息,其路径通常是指当前文档所在的同一台机器上的 HTML 文档。相对 URL 可以包含相对路径组件(“..”表示父级位置),并且可以是片段 URL。 来源:http://www.w3.org/TR/WD-html40-970708/htmlweb.html 如果解析 URL 的结果与解析相对于什么都无关的 URL 相同,并且该输出不是失败,则 URL 是绝对 URL。 来源:http://www.w3.org/TR/url/

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