在http://中用//替换http://是否有效<script src=“http://…”>?

ⅰ亾dé卋堺 提交于 2020-02-26 14:41:03

我有以下要素:

<script type="text/javascript" src="https://cdn.example.com/js_file.js"></script>

在这种情况下,该站点是HTTPS,但该站点也可能只是HTTP。 (该JS文件位于另一个域上。)为了方便起见,我想知道以下操作是否有效:

<script type="text/javascript" src="//cdn.example.com/js_file.js"></script>

我想知道删除http:https:是否有效?

在我测试过的所有地方似乎都可以使用它,但是在某些情况下它不起作用?


#1楼

遵循gnud的参考之后, RFC 3986第5.2节说:

如果定义了方案组件,表明引用以方案名称开头,那么该引用将被解释为绝对URI,我们就完成了。 否则,参考URI的方案将从基本URI的scheme组件继承

所以//是正确的:-)


#2楼

正如其他答案所言,这确实是正确的。 不过,您应该注意,某些网络搜寻器会通过在您的服务器上请求它们(就像本地URL)来触发404。 (他们无视双斜杠并将其视为单斜杠)。

您可能想在Web服务器上设置一条规则以捕获并重定向它们。

例如,使用Nginx,您可以添加以下内容:

location ~* /(?<redirect_domain>((([a-z]|[0-9]|\-)+)\.)+([a-z])+)/(?<redirect_path>.*) {
  return 301 $scheme:/$redirect_domain/$redirect_path;
}

不过请注意,如果您在URI中使用句点,则需要提高特异性,否则最终会将这些页面重定向到不存在的域。

另外,这是为每个查询运行的一个相当大的正则表达式-我认为,值得对404兼容的不兼容浏览器进行惩罚,而不是对大多数兼容浏览器造成(轻微)性能下降。


#3楼

我在html5-boilerplate上看到的模式是:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

它可以在不同的方案(如httphttpsfile上顺利运行。


#4楼

使用//somedomain.com作为JS文件的引用时,我们在日志中看到404错误。

导致404出现的引用看起来像这样:ref:

<script src="//somedomain.com/somescript.js" />

404要求:

http://mydomain.com//somedomain.com/somescript.js

随着这些定期显示在我们的Web服务器日志中,可以肯定地说:所有浏览器和Bot 都不遵循RFC 3986第4.2节。 最安全的选择是在可能的情况下包括该协议。


#5楼

许多人将此称为协议相对URL。

这会导致在IE 7和8中双重下载CSS文件

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!