Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 使用前导双斜杠在URL中继承协议有什么缺点吗?i、 e.src=”等//domain.com“;_Http_Url_Https_Url Protocol - Fatal编程技术网

Http 使用前导双斜杠在URL中继承协议有什么缺点吗?i、 e.src=”等//domain.com“;

Http 使用前导双斜杠在URL中继承协议有什么缺点吗?i、 e.src=”等//domain.com“;,http,url,https,url-protocol,Http,Url,Https,Url Protocol,我有一个从外部域加载图像的样式表,需要根据当前URL从https://安全订单页面和http://其他页面加载。我发现以双斜杠开头的URL继承了当前协议。所有浏览器都支持这种技术吗 html示例: <img src="//cdn.domain.com/logo.png" /> 如果浏览器支持或,那么它确实会使用页面URL的方案来引用以“/”开头的引用。当在链接或@import上使用时,IE7/IE8将每年下载两次该文件 2014年更新: 现在SSL是,而且,这种技术现在是一种反模式

我有一个从外部域加载图像的样式表,需要根据当前URL从https://安全订单页面和http://其他页面加载。我发现以双斜杠开头的URL继承了当前协议。所有浏览器都支持这种技术吗

html示例:

<img src="//cdn.domain.com/logo.png" />

如果浏览器支持或,那么它确实会使用页面URL的方案来引用以“/”开头的引用。当在
链接或
@import
上使用时,IE7/IE8将每年下载两次该文件

2014年更新:

现在SSL是,而且,这种技术现在是一种反模式。如果您需要的资产在SSL上可用,则始终使用
https://
资产


如果您的URL是在网页上下文之外查看的,则会出现一个缺点。例如,电子邮件客户端(比如Outlook)中的电子邮件实际上没有URL,当您查看包含协议相关URL的邮件时,根本没有明显的协议上下文(邮件本身独立于用于获取它的协议,无论是POP3、IMAP、Exchange、uucp还是其他协议)因此URL没有相关的协议。我还没有调查过与电子邮件客户端的兼容性,以了解它们在遇到缺少的协议处理程序时会做什么——我猜大多数人都会猜测http。Apple Mail拒绝让您在没有协议的情况下输入URL。这类似于相对URL在电子邮件中不起作用的方式,因为同样缺少上下文

类似的问题也可能出现在其他非HTTP上下文中,如推特、短信、Word文档等


更一般的解释是匿名协议URL不能单独工作;必须有一个相关的上下文。因此,在一个典型的web页面中,可以通过这种方式引入脚本库,但是任何外部链接都应该指定一个协议。我尝试了一个简单的测试:
//stackoverflow.com
映射到
file:///stackoverflow.com
我在所有浏览器中都试用过,因此它们本身无法工作。

原因可能是提供了可移植的网页。如果外部页面未加密传输(http),为什么要加密链接的脚本?这似乎是不必要的性能损失。如果外部页面是安全传输加密的(https),那么链接内容也应该加密。如果页面被加密,链接内容不会被加密,即似乎会发出混合内容警告。原因是攻击者可以在途中操纵脚本。请参阅以获得更详细的讨论


EFF的活动建议尽可能使用https。现在,我们有足够的服务器容量来提供始终加密的网页。

只是为了完整性。这在另一个帖子中提到:


请检查整个线程。

这似乎是一种非常常见的技术。没有缺点,它只帮助统一页面上所有资产的协议,因此应尽可能使用。

所有主要浏览器都支持这一点吗?(IE7,IE8,FF,Chrome,Safari)考虑到第一个描述它的RFC,RFC1808,是15年前写的,URL引用是网站功能的关键,我认为现在可以肯定地说几乎所有主要浏览器都支持它。但唯一能确定的方法是自己尝试一下,看看会发生什么。这个问题是由一个问类似问题的人提出的,我在前一年的RFC1630中发现的(声明不同,但仍然允许有问题的格式)。它很可能是以前位于
ftp://info.cern.ch/pub/www/doc/http-spec.txt
从1991年开始,任何人都应该有存档副本。“2014.12.17:现在SSL被鼓励用于所有人,并且不存在性能问题,这种技术现在是一种反模式。如果您需要的资产在SSL上可用,则始终使用https://asset。“(引用自)@joonas.fi认为这种推理是二年级的。SSL仍然会对性能产生影响,并且在许多应用程序中是不必要的。我当然更喜欢使用它,但我不希望在我部署的代码中强制使用它。这会降低网站的速度吗???没有理由对性能产生任何影响,除非我der在她的回答中列出了下面的内容。看起来我有点了解了。几个月前,谷歌开发者开始在他们托管的Javascript库页面上使用这种约定,如果这样的HTML文件是本地加载的(直接用浏览器打开的)?看起来像Firefox(本例中为28)然后不加载远程资源。这是有道理的,因为那时HTTP不是父协议。但在我看来,这是一个缺点。这是一个非常好的观点,我昨晚睡着的时候就在考虑这个问题。另一个问题是
https
HTTP
版本可能实际上不可用,你知道吗不能总是假设它是。在浏览器之外,可以说你是自己的。电子邮件或其他客户端是否知道javascript或css等还没有定论。所以这是一个关于相对URL的争论点?不是一个争论点。许多电子邮件客户端支持JS,当从
文件://
加载时,浏览器当然可以。这是一个m我真希望有一种方法可以指定使用http,除非当前url是https,在这种情况下使用https,而不是指定使用当前页面加载的相同协议,这实际上就是
/
的含义。如果您指定一个,例如
,您可以查看内容在web端之外。
@EricLaw是IE9注册表中固定的
.class { background: url(//cdn.domain.com/logo.png); }
if (plain http environment) {
    use 'http://example.com/my-resource.js'
} else {
    use 'https://example.com/my-resource.js'
}