2010-07-08 42 views
11

我看过一些网站使用//somedomain.com/images/img.jpg而使用http://somedomain.com/images/img.jpg其中也包括http:在src或href中使用“http://”和“//”之间有什么区别?

这两者之间有区别吗?浏览器是否正在纠正丢失的http:,这些人正在懒惰?我好奇背后的推理。

+1

当你说你已经“看过网站”,你在哪里见过他们?它是打印的还是网站链接的名称? – 2010-07-08 23:53:44

+0

我的意思是查看它们的源代码。不在印刷品或类似的东西中。 – chadley 2010-07-08 23:56:33

回答

11

如果您已经通过http登录该网站,则会假定您正在讨论http并通过相同的协议连接到同一台服务器。同https。如果您使用http并且想要使用https,则需要在href中指定协议。

+0

因此,这将用于可以在'http'或'https'上查看的网站上? – chadley 2010-07-08 23:55:37

+3

@chadley - 本地使用的意图较少,但远程使用。如果'superanalytics.com'同时提供HTTP和HTTPS,它可能会告诉您将其分析脚本包含在URI'// superanalytics.com/ analytics.js'中。这样,如果你运行HTTP,SuperAnalytics也会。如果您运行的是HTTPS,SuperAnalytics也会。然后你不会得到那些讨厌的“这是一个安全的网站,上面有不安全的东西!”警告。 – Matchu 2010-07-09 00:24:57

+0

感谢您澄清matchu。现在你已经指出了一个例子,这是非常有意义的。 – chadley 2010-07-09 00:29:03

-1

我从来没有见过//somedomain.com/images/img.jpg,不认为这是合法的。

我看过/images/img.jpg这意味着“使用当前域”。如果您有多个指向同一网站的网址(例如,aaaaa.com & aaaaa.net),这会很有帮助。

+1

这实际上是合法的。 – 2010-07-09 00:12:01

7

不是我以前见过它,而是一个有效的URI参考。从语法:

URI-reference = URI | relative-ref 

relative-ref = relative-part [ "?" query ] [ "#" fragment ] 

relative-part = "//" authority path-abempty 
      | path-absolute 
      | path-noscheme 
      | path-empty 

,其中作为绝对URI是:

URI   = scheme ":" hier-part [ "?" query ] [ "#" fragment ] 

欲了解更多信息,请随时免费阅读的RFC3986

+0

+1。很棒!我现在将使用它! (至少对于托管静态内容的服务器上的文件的链接)。 – 2010-07-09 00:06:57

+0

请注意,这意味着在实践中没有理由使用两个斜杠 - 只有一个会被视为绝对路径。 – Chuck 2010-07-09 00:17:09

+0

我认为这个答案忽略了一点。它是有效的,但也是功能性的。请参阅@ rakuo15的答案。 – Matchu 2010-07-09 00:23:05

2

//somedomain.com/images/img.jpg剩下的是一个完全有效的URI语法为每RFC 3986: Section 4.2

它相对于当前的scheme,因此在切换http和https时非常有用,因为您不需要指定方案。

所有现代浏览器都明白格式,包括IE 6

3

方案相对URL的,当你服HTTPS网站,你想与大家分享喜欢的样式表,图像同样的静态内容是特别有用的,脚本等等来自HTTP站点。硬编码在像<link href><script src><img src>等静态内容链接http:和浏览网页本身在https:将导致平均网页浏览器弹出一个安全警告,如下面的知名IE安全警报:

alt text

alt text

通过方案相关URL提供“非安全”内容将解决此问题。

相关问题