协议相对 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 吗?的主要内容,如果未能解决你的问题,请参考以下文章