24

我们可以看到许多 HTML 页面使用src="//example.com/myjavascript.js"包含一个.js并让浏览器使用http:///https://取决于页面 URL 的当前方案。

这是一个有效的 URI 吗?

4

3 回答 3

33

是的,这绝对是有效的。它是一个“方案相关”或“协议相关”的 URI。从一开始就在规范中。对处理 http/https 问题很有帮助。

阅读更好的描述和警告: 在 <script src="http://..."> 中用 // 替换 http:// 是否有效?

需要记住的几点:

  • IE 7 & 8 有一些小问题,双下载
  • 如果您从文件中查看 HTML 页面,浏览器会将方案替换为,而不是像使用以或file://开头的完整 URL 那样从服务器加载您的 JS 文件。http://https://

编辑现代 webdev 实践:

虽然 URL 仍然有效,但现在建议将其https用于第三方资源(并从安全页面提供这些资源)。多年前的性能或兼容性问题在很大程度上通过更新的协议和浏览器得到解决。

于 2012-08-09T10:23:10.617 回答
2

作为警告...当在 HTML BASE 标记中使用时,我们遇到了 Internet Explorer 不支持这种方法的问题(IE8 和 9 已确认,在修补问题之前没有测试任何其他方法)。

在网站上新实施 SSL 后,我们最初更新了整个应用程序中的 BASE 标记以简单地引用“//www.mydomain.com”:但是页面模板在所有不存在于网站的根。有道理,因为 BASE 标记没有拾取样式表或其他相对链接的资源,这些资源假定它们是从根目录引用的,而不是从嵌套位置引用的。

由于 BASE URI 无论如何都是我们自己的域,因此我们通过将 BASE 标记的值设置为“ https://www.mydomain.com ”来解决此问题。无论客户端是否以 SSL 模式浏览​​网站,至少它现在可以跨浏览器工作并且始终可以找到其内容 - 通过始终强制使用 https,我们确保不会出现任何内容不匹配通过在使用 https 浏览页面时将 BASE 路径设置为 http 位置来在此过程中发出警告。

于 2013-04-03T13:05:04.213 回答
1

这确实是有效的,我刚刚以艰难的方式学到了这一点!我们破坏了一项自定义功能,因此您应该始终验证这样的 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;
    }
    
于 2016-09-30T09:19:42.790 回答