协议相对URL是相对URL吗?

11

考虑一个像这样的协议相对URL;

//www.example.com/file.jpg

我脑海中一直存在的想法是,协议相对URL实际上是绝对URL。它们的行为与绝对URL完全相同,而且从来不像相对URL那样工作。我不希望这会让浏览器去找什么东西,例如:

http://www.example.com///www.example.com/file.jpg

URL定义主机和路径(就像绝对URL一样),方案从页面使用的方案继承,因此它构成了一个完整的明确的URL,即绝对URL。

对吗?

现在,经过进一步的研究,我发现这个答案,其中提到:

如果一个URL以方案和方案特定部分开头,它就称为绝对URL(在此之后是//http:)。其他所有内容都是相对URL

问题和答案都没有明确讨论协议相对URL,所以我意识到这可能只是措辞上的疏忽。

然而,我现在在我的开发中也遇到了一个问题,只接受绝对URL的系统不能处理协议相对URL,我不知道这是出于设计还是由于错误。

通常与协议相对URL相关联的RFC3986章节也频繁使用“相对”一词。然后,4.3继续指出,绝对URI定义了一个方案。

所有这些证据都反对我的最初假设,这引出了一个问题:

协议相对URL是相对的还是绝对的?

2个回答

4
每个相对URL都是一个唯一的URL,给定它相对于的URL。例如,如果您的页面是http://mypage.com/some/folder/,那么您知道相对URL this/that 对应于http://mypage.com/some/folder/this/that,并且您知道相对URL //otherpage.com/ 解析为http://otherpage.com/。重要的是,在不知道它相对于哪个页面的情况下,它无法被解析。
相对URL是任何相对于某些内容的URL,不能单独解析。绝对URL不需要任何上下文来解析。

3
你所说的“协议相对 URL”,WHATWG 在 URL Standard 文档中称之为“方案相对 URL”,它不是绝对 URL,而是相对 URL。尽管大多数在 HTTPS 上提供的站点会在相应的 HTTP URL 上显示相同的内容,但并非总是如此,因此不包括方案的 URL 不能被视为绝对 URL。
文档中指出:

绝对URL必须是协议,后跟“:”,然后是协议相对URL(如果协议相对协议),否则是数据协议,可选地跟随“?”和查询

具体回答您的问题,我们有:

一个相对 URL必须是一个协议相对 URL,一个绝对路径相对 URL或者一个不以协议和“:”开头并且可选地跟着一个“?”和查询路径相对 URL
解析一个相对 URL时,必须有一个基础 URL在范围内。

示例(括号表示可选项)

路径相对URL [路径段][/[路径段]]...
  • about
  • about/staff.html
  • about/staff.html?
  • about/staff.html?parameters

绝对路径相对URL: /[相对路径URL]

  • /
  • /about
  • /about/staff.html
  • /about/staff.html?
  • /about/staff.html?parameters
//[userinfo@]host[:port][absolute-path-relative URL]
  • //username:password@example.com:8888
  • //username@example.com
  • //example.com
  • //example.com/
  • //example.com/about
  • //example.com/about/staff.html
  • //example.com/about/staff.html?
  • //example.com/about/staff.html?parameters

绝对URL:scheme:[scheme-relative URL][?parameters]

  • https://username:password@example.com:8888
  • https://username@example.com
  • https://example.com
  • https://example.com/
  • https://example.com/about
  • https://example.com/about/staff.html
  • https://example.com/about/staff.html?
  • https://example.com/about/staff.html?parameters

相对 URL:

  • 来自协议相对 URL列表的任何内容
  • 来自绝对路径相对 URL列表的任何内容
  • 来自路径相对 URL列表的任何内容

注意:该答案不与第一个答案不同意,但是在我读了几遍并进行了进一步研究之后才有点清楚该帖回答了问题。希望这个答案能更好地为其他人解决这个问题。


“absolute-path-relative URL” 不在 URL 规范中(或不再在其中)… - ZachB

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