在url/src/href属性中出现的两个斜杠是什么意思?

170

2个回答

250

“两个斜杠”通常是“使用加载当前页面的协议请求所引用的资源”的常见简写。

最为人熟知的是“协议相对URL”,当元素(例如你示例中的JS文件)可以从httphttps上下文中提供和/或请求时,它们尤其有用。通过使用协议相对URL,您可以避免实现

if (window.location.protocol === 'http:') {
    myResourceUrl = 'http://example.com/my-resource.js';
} else {
    myResourceUrl = 'https://example.com/my-resource.js';
}

如果代码中的逻辑类型存在混乱(假设服务器的example.com可以通过httphttps同时提供内容),那么你需要注意以下问题。

一个著名的实际例子是Magento 1.X电子商务引擎:为了性能原因,分类和产品页面默认使用纯粹的http,而结账则启用https

如果某些资源(例如网站头部的促销横幅)通过非协议相关URL(即http://example.com/banner.jpg)进行引用,则访问启用https的结账页面的客户将收到相当不友好的提示:

"此页存在不安全元素"

- 这显然对业务来说并不会产生良好的效果。

但如果前面提到的资源是通过//example.com/banner.jpg进行引用的,浏览器会在纯http的产品/类别��面和启用https的结账流程中自动选择适当的协议加载它。

简而言之:即使有最小的混合http/https环境可能,请使用双斜杠/协议相关URL来引用资源,前提是提供这些资源的主机支持http和https。


6
是的,但为什么不只用一个斜杠呢?那样不是也能达到同样的效果吗? - mckoss
14
如果文件在同一域名下,单斜杠就可以很好地工作。当然,我可以通过引用“/resource.jpg”来获取“http(s)://mydomain.com/resource.jpg”。对于“http(s)://some-other-dudes-domain.com/other-resource.jpg”,单个斜杠显然行不通。 - vzwick
1
@vzwick,浏览器从什么时候开始支持这种语法?自IE6时代以来吗? - Pacerier
3
@Pacerier - 这个标准化至少从RFC 3986开始,大约是2005年左右。可能在此之前也已经实施过了。 - vzwick
根据维基百科,IE 6于2001年8月发布,IE7于2006年10月发布。如果@Pacerier说IE6是猜测,那么这个猜测是准确的。 - Shanimal
显示剩余3条评论

15

它将根据请求方式自动添加https或http。


14
值得注意的是,这将填充不仅 http 或 https,还包括浏览器支持的任何其他协议,例如 FTP。它告诉浏览器使用正在使用的相同协议。(很抱歉在旧帖子上进行评论!) - kirgy
现在还有http2,所以可能会有更多有趣的东西出现。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接