协议相对URL是相对URL吗?

时间:2013-03-22 23:28:12

标签: url uri relative-path absolute-path protocol-relative

所以请考虑像protocol-relative URL一样;

//www.example.com/file.jpg

我记忆中的想法是,我认为协议相对的URL实际上是绝对的URL。它们的行为与绝对URL完全相同,从不像相对URL那样工作。我不希望这会让浏览器找到一些东西

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

URL定义了主机和路径(就像绝对URL一样),并且该方案继承自所使用的页面,因此它创建了一个完整的明确URL,即绝对URL。

右?

现在,经过对此的进一步研究,我发现了this answer,其中说明了

  

URL 如果以方案和方案特定部分(//之后的http:)开头,则称为绝对网址。其他任何内容都是相对网址

问题和答案都没有具体讨论与协议相关的URL,所以我注意到它可能只是对措辞的疏忽。

但是,我现在也在我的开发中遇到了一个问题,一个只接受绝对URL的系统不能与协议相关的URL一起运行,我也不知道是否这是设计或由于一个错误。

与协议相关的URL相关的RFC3986 section通常也会链接到#34; relative"周围很多。 4.3然后继续说绝对URI定义了一个方案。

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

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

2 个答案:

答案 0 :(得分:3)

每个相对URL都是一个明确的URL,给定它相对于的URL。因此,如果您的网页为http://mypage.com/some/folder/,那么您知道相对网址this/thathttp://mypage.com/some/folder/this/that相对应,并且您知道相对网址//otherpage.com/已解析为http://otherpage.com/。重要的是,如果不知道它相对于的页面URL,就无法解决它。

相对URL是任何相对于的URL,并且无法自行解析。 aboslute URL不需要任何上下文来解决。

答案 1 :(得分:3)

你称之为“协议相对URL”WHATWG在URL Standard文档中称之为“方案相对URL”,它不是绝对URL,而是相对URL。

当然,HTTPS上可用的大多数站点在相应的HTTP URL上显示相同的内容,但情况不一定如此,因此,不包含该方案的URL不能被认为是绝对的。

来自文件:

  

绝对网址必须是scheme,后跟“:”,如果scheme-relative URL是{{3},则后跟scheme },或relative scheme否则,可选地后跟“?”和scheme data

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

  

相对网址必须是queryscheme-relative URLabsolute-path-relative URL,不能以path-relative URL和“{ :“,可选地后跟”?“和scheme

     

queryrelative URL时,parsed必须在范围内。

示例(括号表示可选)

路径相对网址 [path segment][/[path segment]]…

  • about
  • about/staff.html
  • about/staff.html?
  • about/staff.html?parameters

绝对路径相对网址: /[path-relative 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

绝对网址: 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

相对网址

  • 方案相对网址列表
  • 中的任何内容
  • 绝对路径相对网址列表
  • 中的任何内容
  • 路径相对网址列表
  • 中的任何内容

注意:这个答案与第一个答案并不一致,但我只是清楚地看到这个帖子在阅读了几次并进行进一步研究后回答了这个问题。希望这个答案可以让其他人更好地解决这个问题。