协议相对 URL 是相对 URL 吗?

Posted

技术标签:

【中文标题】协议相对 URL 是相对 URL 吗?【英文标题】:Are protocol-relative URLs relative URLs? 【发布时间】:2013-03-12 23:09:37 【问题描述】:

所以考虑像这样的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 的系统无法与协议相对 URL 一起使用,我不知道这是设计使然还是由于一个错误。

RFC3986 section 通常与协议相关的 URL 相关联,它也经常使用“相对”这个词。然后 4.3 继续说绝对 URI 定义了一个方案。

所有这些反对我最初假设的证据都让我想到了这个问题;

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

【问题讨论】:

【参考方案1】:

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

尽管 HTTPS 上可用的大多数网站在相应的 HTTP URL 上显示相同的内容,但情况不一定如此,因此不包含该方案的 URL 不能被视为绝对 URL 是有意义的。

来自文档:

绝对 URL 必须是 scheme,后跟“:”,如果 scheme 是 relative scheme,则后跟 scheme-relative URL,否则为 scheme data,可选地后跟“?”和query。

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

相对 URL 必须是 scheme-relative URL、absolute-path-relative URL 或不以 scheme 和“:”开头的 path-relative URL,后跟可选的“ ?”和query。

在relative URL 是parsed 的地方,base URL 必须在范围内。

示例(括号表示可选)

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

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

绝对路径相对 URL: /[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

相对网址:

方案相对 URL 列表中的任何内容 绝对路径相对 URL 列表中的任何内容 路径相对 URL 列表中的任何内容

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

【讨论】:

“绝对路径相对 URL”不在(或不再)在 URL 规范中...【参考方案2】:

每个相对 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。绝对 URL 不需要任何上下文来解析。

【讨论】:

以上是关于协议相对 URL 是相对 URL 吗?的主要内容,如果未能解决你的问题,请参考以下文章

ruby Paperclip中的协议相对URL

UIWebView 不从协议相对 URL 加载图像

相对URL:协议名跨域的一种处理方式

如何生成URL?

绝对URL和相对URL

仅打印绝对 URL