需要方案相对URL澄清

3

我一直在阅读关于URL的内容,包括绝对URL、方案相关URL、根相关URL和位置相关URL。
但我仍然不明白这两者之间的区别:

//domain.com/index.html           - scheme relative
domain.com/index.html             - ?

问题 1:
如果我没错,//domain.com/index.html将解析为绝对 URL,如下所示:

http://domain.com/index.html
https://domain.com/index.html
ftp://domain.com/index.html
file://domain.com/index.html    -- if in email

浏览器会有不同的反应:ie6不支持,ie7,8将获取数据两次(http https)。

.

问题2:
domain.com/index.html会如何解析?与Q1中的scheme相对url相同吗?还是其他什么?

.

问题3:
这些url之间有什么区别,是什么以及为什么?

//www.domain.com/index.html
www.domain.com/index.html

问题4:
//www.domain.com/index.html将如何解析?

.

问题5:
www.domain.com/index.html将如何解析?

2个回答

4

看到这样的URL,很容易根据人类对它们含义的了解来应用,而不是像网页浏览器软件那样使用更简单的规则。

最简单的URL类型(或更准确地说是 URI,因为有些方案不仅代表位置,还有标识符)是绝对的;它以一个方案开始,然后是一个冒号,不需要上下文来解析。例如:

  • http://example.com
  • https://www.example.com/foo/bar.baz
  • http://127.0.0.1:8001
  • mailto:someone@example.com
  • data:text/plain,test
  • urn:example

然后是相对于位置的URL;也就是没有方案和前导斜杠的任何内容。这些替换当前上下文中斜杠后面的所有内容,但保留其余内容。如果当前上下文是 http://example.com/foo/bar.baz,您可以使用如下所示的相对 URL:

  • bob.baz -> http://example.com/foo/bob.baz
  • thing/widget.gizmo -> http://example.com/foo/thing/widget.gizmo
  • example.com/page -> http://example.com/foo/example.com/page

请注意,最后一个示例乍一看像是域名,但实际上与所有其他相对 URL 完全相同。

有前导斜杠的根相对URL类似,但要删除第一个斜杠后面的内容,而不是最后一个。给定相同的上下文,前面的示例变为:

  • /bob.baz -> http://example.com/bob.baz
  • /thing/widget.gizmo -> http://example.com/thing/widget.gizmo
  • /example.com/page -> http://example.com/example.com/page

根相对URL也可以包含冒号,因为前导斜杠不能是方案前缀的一部分:

  • /foo:bar -> http://example.com/foo:bar
  • /urn:example -> http://example.com/urn:example

最后,有两个前导斜杠的方案相关URL。它们替换原始双斜杠后面的所有内容,只保留方案:

  • 如果上下文是http://example.com/foo/bar,那么//example.org/bob的意思是http://example.org/bob
  • 如果上下文是https://example.com/foo/bar,那么//example.org/bob的意思是https://example.org/bob
  • 如果上下文是http://example.com,那么//foo.bar的意思是http://foo.bar

请注意,最后一个例子对我们来说看起来并不像一个域名,但它仍然遵循相同的规则。在解析任何相对形式时,是否URL实际上是有用的并不被考虑在内。

诸如“以www开头”和“以.com结尾”的约定不能被依赖,并且不用于确定URL是否为相对路径,因此您只需要遵循这个简单的规则就可以回答所有问题:

  1. 如果有两个斜杠,它是协议相对的
  2. 如果有一个斜杠,它是根目录相对的
  3. 如果没有前导斜杠,但有一个冒号,则假定它是绝对URI
  4. 如果既没有前导斜杠,也没有冒号,则它是位置相关的

你说:“看看它们各自有多少前导斜杠:如果没有斜杠,也没有冒号,那么它是相对于位置的。” 如果有冒号呢?... 那答案就是 Q4:(scheme relative)http://www.domain.com/index.html 和 Q5:(location relative)http://example.com/www.domain.com/index.html,提供的基本URL为http:example.com,对吗? - CoR
1
@CoR 是的,那些就是答案。冒号的存在是用来告诉绝对URL的一个(可能有点简化的)规则,例如 mailto:foo@example.comdata:text/plain,testurn:example 永远不会被解析为相对URI。然而,如果有一个前导斜杠,它们仍然会被解析为相对URI。 - IMSoP
终于搞定了。这个答案值得 50 点声望。我接受了这个答案。但请你如果可能的话编辑一下你的回答,加上 rule。 - CoR
1
现在编辑了更清晰的摘要和一些额外的例子,因为我不在移动设备上了。很高兴它能帮到你。 :) - IMSoP
说实话,你真的让我大吃一惊!我以为我对绝对链接和相对链接都了如指掌。但是我却无法理解www.domain.com被解释为URL路径的一部分。 - CoR

0

它们非常不同。第二个是对路径“domain.com/index.html”的相对引用。

关于“domain.com”与“www.domain.com”的区别:这只是不同的主机名(或第二种变体中的路径名)。


如果不太难的话,您能否用通俗易懂的语言解释一下这4个URL及其解析方式。我知道相对协议会被解析为 http://domain... 或者 https://domain... 或者 ftp://domain...,那其他三个呢? - CoR

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