【问题标题】:Is a URL starting with // valid?以 // 开头的 URL 是否有效?
【发布时间】:2012-08-09 10:08:37
【问题描述】:

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

这是一个有效的 URI 吗?

【问题讨论】:

标签: url


【解决方案1】:

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

阅读更好的描述和注意事项: Is it valid to replace http:// with // in a <script src="http://...">?

注意几点:

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

为现代网络开发实践编辑:

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

【讨论】:

  • 感谢@Adam 的澄清,我已经从问题中删除了我的评论 - 你每天都会学到新东西(如果你不小心的话)
【解决方案2】:

作为警告...当在 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 位置来在此过程中发出警告。

【讨论】:

    【解决方案3】:

    确实是有效的,而且我刚刚学会了这一点!我们破坏了一项自定义功能,因此您应该始终验证这样的 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;
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-13
      • 2016-11-29
      • 2022-01-26
      • 2015-10-21
      • 2015-07-19
      • 2017-11-19
      • 2012-12-19
      • 2021-06-16
      相关资源
      最近更新 更多