【发布时间】:2012-08-09 10:08:37
【问题描述】:
我们可以看到很多HTML页面使用src="//example.com/myjavascript.js"包含一个.js,让浏览器使用http:///https://,这取决于页面URL的当前方案。
这是一个有效的 URI 吗?
【问题讨论】:
标签: url
我们可以看到很多HTML页面使用src="//example.com/myjavascript.js"包含一个.js,让浏览器使用http:///https://,这取决于页面URL的当前方案。
这是一个有效的 URI 吗?
【问题讨论】:
标签: url
是的,它绝对有效。它是一个“方案相关”或“协议相关”的 URI。从一开始就在规范中。对处理 http/https 问题很有帮助。
阅读更好的描述和注意事项: Is it valid to replace http:// with // in a <script src="http://...">?
注意几点:
file:// 替换方案,而不是像使用以http:// 或https:// 开头的完整URL 那样从服务器加载您的JS 文件。 为现代网络开发实践编辑:
虽然 URL 仍然有效,但现在建议将 https 用于第三方资源(并从安全页面提供这些资源)。多年前的性能或兼容性问题在很大程度上已通过更新的协议和浏览器得到解决。
【讨论】:
作为警告...当在 HTML BASE 标记内使用时,我们遇到了 Internet Explorer 不支持此方法的问题(已确认 IE8 和 9,在修补问题之前未测试任何其他方法)。
在网站上新实施 SSL 后,我们最初更新了整个应用程序的 BASE 标记以简单地引用“//www.mydomain.com”:但是页面模板在所有没有的脚本上都损坏了(仅在 IE 中)住在网站的根目录。有道理,因为 BASE 标记没有拾取样式表或其他相对链接的资源,这些资源假定它们是从根目录引用的,而不是从嵌套位置引用的。
由于 BASE URI 无论如何都是我们自己的域,因此我们通过将 BASE 标记的值设置为“https://www.mydomain.com”来解决此问题。无论客户端是否以 SSL 模式浏览网站,至少它现在可以跨浏览器工作并且始终可以找到其内容 - 通过始终强制使用 https,我们确保不会出现任何内容不匹配通过在使用 https 浏览页面时将 BASE 路径设置为 http 位置来在此过程中发出警告。
【讨论】:
确实是有效的,而且我刚刚学会了这一点!我们破坏了一项自定义功能,因此您应该始终验证这样的 URL(在 .NET 中): 注意:
“方案相对”URI (UriKind.RelativeOrAbsolute)
public bool IsValidUrl(string resourceUrl)
{
Uri uri;
if (Uri.TryCreate(resourceUrl.Trim(), UriKind.RelativeOrAbsolute, out uri))
{
return uri.IsWellFormedOriginalString();
}
return false;
}
【讨论】: