为什么要使用协议相对URL?

时间:2015-02-11 03:51:18

标签: html http https cdn relative-url

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

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

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

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

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

5 个答案:

答案 0 :(得分:35)

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

  

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

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

答案 1 :(得分:7)

因为表现。建立HTTPS连接所需的时间比HTTP长得多,TLS握手会将延迟延迟增加到2 RTT s。您可以在移动网络上注意到它。因此,如果您不需要,最好不要使用HTTPS资产网址。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

有很多潜在原因,尽管它们并不是特别重要:

  • 每个有议程的企业下次推送新协议如何?那我们是否将不得不再次换掉数千个字符串?不用了。
  • HTTPS比相同版本的HTTP慢
  • 如果HTTP / 2的the notes listed at caniuse.com中的任何一个问题
  • 从概念上讲,如果服务器强制执行该协议,则没有理由首先对其进行详细说明。不可知论就是它。它覆盖了您的所有据点。

答案 4 :(得分:0)

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