【问题标题】:Difference between http:// and //http:// 和 // 的区别
【发布时间】:2014-10-09 18:41:34
【问题描述】:

我注意到 CDN 在脚本源代码的开头使用了//

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>  

这在本地不起作用(显然),所以我在//之前添加http:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>  

那么...为什么他们将// 放在开头而不是http://?有什么意义?是某种 DNS 预取吗?

另外,如果脚本元素位于页面底部,// 是否无用?

https://developer.mozilla.org/en-US/docs/Web/HTTP/Controlling_DNS_prefetching

【问题讨论】:

  • //会检测客户端当前使用的协议,所以如果你使用https://,它会调用https://ajax.googleapis.com...,而如果你在网站上使用http://,它将致电http://ajax.googleapis.com....。这肯定有一些问题,就好像你在一个文件协议(file://)上它会调用file://ajax.googleapis.com...,它不存在。
  • 查看link
  • @PicrofoSoftware 所以,基本上这是一种宽容的说法,“我接受 https 或 http?”
  • @Matthew 哈哈,没错!事实上,这并不总是必须是 https/http,它取决于客户端 Web 浏览器使用的协议。这实际上是为了正确加载脚本,因为如果您使用https:// 并且网站请求加载不安全的内容(来自http 协议),除非您的浏览器允许,否则该内容将被阻止。但是,如果您要使用 http:// 并要求安全加载内容 (https://),那很好;因此在这两种情况下安全加载内容会更安全。
  • @LieRyan:我认为在 HTTPS 站点上从某个“随机”代理加载数据是不可取的。想想中间人攻击。

标签: javascript html dns


【解决方案1】:

// 是一个相对协议指示符。它将通过当前正在使用的任何协议加载。如果您通过http: 加载页面,它将通过http: 加载资源。如果您通过https: 加载它,它将通过https: 加载。这很重要,因为出于安全目的,通过 HTTPS 加载的页面也应该通过 HTTPS 加载其资源。

它在本地不起作用的原因是因为在本地,您正在使用file: 协议(显然),所以它会尝试通过file: 加载资源,这不起作用,因为它URL,而不是目录中资源的文件路径。

您可能还想看看this page 描述其用法(提示、常见陷阱等)和 标记。

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 2011-06-15
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多