Protocal-relative URL
协议相对 URL 是以 //
开头的 URL,而不是 http://
或 https://
。用于加载资源的实际协议派生自包含页面;因此,HTTPS 页面中的//example.com/smile.jpeg
将加载https://example.com/smile.jpeg
。
反模式声明
人们普遍声称应该完全放弃协议相对的URL,转而支持HTTPS;我最近的一个拉取请求被拒绝了(最终只接受HTTPS)。
问题所在
网络上许多信誉良好的服务仍然使用协议相对 URL。例如,Google Analytics调用//www.google-analytics.com/analytics.js
,Disqus调用//EXAMPLE.disqus.com/embed.js
。
是否有理由为什么 Web 服务仍然使用不安全的协议相对 URL 而不是 HTTPS?
因为服务可能根本不是通过 HTTP 调用的?查看 IANA 注册的 URI 方案列表。通过使用协议相对 URL,它允许由允许相同语法的任何方案加载页面。
协议相对 URL 还允许在服务器配置中控制方案,而不是页面生成代码或页面模板。如果使用协议相对 URL,则可以将 Web 服务器配置为强制将任何纯http:
请求重定向到等效https:
,并且页面模板或代码中的拼写错误不会意外使用http:
(或者,如果这样做,则很容易扫描代码和模板文件并找到所有出现的问题)。
如果资产可通过 https 获得,则没有理由使用协议相对 URL。指定 https 本质上比保持开放更安全,后者为注入不安全的 http 提供了机会。性能不是原因(参考: https://istlsfastyet.com/)。
您提到的那些服务将切换到仅https协议只是时间问题:围绕单个协议/URL进行整合并仅提供安全交付的资产符合他们的最佳利益。