我有以下要素:
<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>
它可以在不同的方案(如http
, https
, file
上顺利运行。
#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。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3161296