在src或href中使用"http://"和"//"有什么区别?

11

我看到有些网站使用 //somedomain.com/images/img.jpg 而不是使用包含 http:http://somedomain.com/images/img.jpg

这两者之间有什么区别吗?是浏览器只是自动纠正了缺少的 http:,这些人只是懒惰吗?我对原因很好奇。


1
当你说你“看过网站”时,你在哪里看到它们的?是在印刷品上还是在网站上链接的名称上? - Adam Ruth
我指的是通过查看它们的源代码来了解,而不是通过打印文章或其他方式。 - chadley
5个回答

11

如果您已经通过 http 进入网站,它会认为您正在使用 http,并通过同一协议连接到相同的服务器。 如果您使用的是 https,情况也是一样的。 如果您正在使用 http 并希望切换到 https,则需要在 href 中指定协议。


所以这将用于可以在httphttps上查看的网站? - chadley
3
@chadley - 这里的意图并不是用于本地使用,而是远程使用。如果 superanalytics.com 同时提供 HTTP 和 HTTPS,它可能会建议您使用 URI //superanalytics.com/analytics.js 来包含其分析脚本。这样,如果您正在运行HTTP,SuperAnalytics也会运行HTTP。如果你正在运行HTTPS,那SuperAnalytics也会运行HTTPS。这样就可以避免出现那些讨厌的“这是一个安全网站,但其中有不安全的内容!”的警告。 - Matchu
谢谢你澄清了,Matchu。现在你指出了一个例子,这就很有道理了。 - chadley
这样的URL被称为协议相对或协议不可知的URL。 - apnerve

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的其余部分。


请注意,这意味着在实践中没有理由使用两个斜杠 - 只需一个就可以作为绝对路径计数。 - Chuck
我认为这个答案没有抓住重点。它是有效的,但也是功能性的。请参考@rakuo15的答案。 - Matchu
@Chuck:使用两个斜杠是有道理的。假设您有http://www.my-dynamic-website.com/some-path/Default.aspx,所有静态内容都托管在http://my-static-content.com/上。在这种情况下,省略* http *以链接到第二个域将节省一些空间。 - Arseni Mourzenko
这个答案可以证明使用是可以的,但 @rakou15 的回答并没有完全回答我的问题。谢谢! - chadley
@MainMa:这会节省空间,但是当有人保存页面并使用“file”协议访问它时,页面将显得损坏。 - Marcel Korpel
显示剩余2条评论

3
当您提供HTTPS网站并希望与HTTP网站共享相同的静态内容(例如样式表、图像、脚本等)时,方案相对URL非常有用。在静态内容链接中硬编码“http:”(如,

2
//somedomain.com/images/img.jpg 是一个符合RFC 3986 : 第4.2节标准的URI语法。它相对于当前协议,因此在切换http和https时非常有用,因为您无需指定协议。所有现代浏览器都支持这种格式,包括IE 6。

-1

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

我见过/images/img.jpg,它意味着“使用当前域名”。如果您有几个网址(例如,aaaaa.com和aaaaa.net)指向同一个站点,这将非常有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接