为啥要使用协议相关的 URL?

Posted

技术标签:

【中文标题】为啥要使用协议相关的 URL?【英文标题】:Why use protocol-relative URLs at all?为什么要使用协议相关的 URL? 【发布时间】:2015-04-11 08:23:29 【问题描述】:

这是 *** 上经常讨论的问题:这意味着什么:

 <script src="//cdn.example.com/somewhere/something.js"></script>

这样做的好处是,如果您通过 HTTPS 访问它,您会自动获得 HTTPS,而不是那种可怕的“此页面上的不安全元素”警告。

但是为什么要使用协议相关的 URL 呢?为什么不在 CDN URL 中始终使用 HTTPS?毕竟,如果您决定通过 HTTPS 加载 HTTP 页面的某些部分,则没有理由抱怨。

(这更适用于 CDN;几乎所有 CDN 都具有 HTTPS 功能。而您自己的服务器可能不一定具有 HTTPS。)

【问题讨论】:

【参考方案1】:

因为性能。建立 HTTPS 连接比 HTTP 需要更长的时间,TLS 握手增加了高达 2 RTTs 的延迟延迟。您可以在移动网络上注意到它。因此,如果不需要,最好不要使用 HTTPS 资产 URL。

【讨论】:

我说还是用http2性能的https比较好,更安全! 这是 2 年前的答案,当时 HTTP2 尚不可用。 这个答案不再正确。在您的网站上启用 HTTP2,HTTPS 比 HTTP 更快。 现在你肯定知道了,并不是 HTTPS 现在比 HTTP 快,而是 HTTP 现在比旧的 HTTP 快,而且只实现了它的 HTTPS 版本。 HTTPS 仍然并且总是比 HTTP 慢。 请注意,当页面离线保存时, //: 链接会被破坏。 joonas.fi/2016/12/27/stop-using-protocol-relative-urls【参考方案2】:

截至 2014 年 12 月,Paul Irish's blog on protocol-relative URLs 说:

2014.12.17:现在 SSL 鼓励所有人使用,并且没有性能问题,这种技术现在是一种反模式。如果您需要的资产在 SSL 上可用,则始终使用 https:// 资产。

除非您有特定的性能问题(例如 Zakjan 的回答中提到的慢速移动网络),否则您应该使用 https:// 来保护您的用户。

【讨论】:

这只适用于第三方资源? @user3448600 对于本地资源,您只需使用 / 路径,而不是 // 路径。 2017年,SO也从protocol-relative切换到HTTPS:nickcraver.com/blog/2017/05/22/https-on-stack-overflow/…【参考方案3】:

需要注意的是,如果您使用 CSP 的 upgrade-insecure-requests,则可以安全地使用与协议无关的 URL (//example.com)。

【讨论】:

【参考方案4】:

有许多潜在的原因,尽管它们都不是特别重要:

下次每个有议程的企业都推出新协议时怎么样?那么我们是否将不得不再次交换数千个字符串?不用了。 HTTPS 比同版本的 HTTP 慢 如果 HTTP/2 的 the notes listed at caniuse.com 中的任何一个有问题 从概念上讲,如果服务器强制执行协议,则首先没有理由对其进行具体说明。不可知论就是这样。它涵盖了您的所有基地。

【讨论】:

【参考方案5】:

相对于协议的 URL 有时会破坏试图检测 location.protocol 的 JS 代码。极旧的浏览器也无法理解它们。如果您正在开发需要最大向后兼容性的 Web 服务(即提供可以在慢速连接和/或旧设备上接收/发送的关键紧急信息),请不要使用 PRURL。

【讨论】:

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

Schema.org 中与协议相关的“图像”URL

HTTP协议及其相关

Http协议相关内容

如何将所有与协议相关的URL重定向到https:// urls?

网络协议|TCP/IP协议相关

爬虫相关