HTML - 不带 HTTP 协议的链接

64

为什么我们在链接的 href 属性中包含 http / https 协议?

如果省略协议名称会有问题吗?

<a href="example.com">my site</a>

32
比较 <a href="example.com"><a href="example.html"> - 由于浏览器无法根据扩展名猜测链接的指向,应该怎么办呢?还是说 <a href="example.pl"> 是指向一个波兰网页还是一个Perl文件 - Gareth
8
使链接跳转到外部的URL部分是“//”,而不是协议。协议只告诉计算机在链接上使用哪个设备。您可以链接到“http://example.com”、“https://example.com”、“ftp://example.com”或仅“//example.com”。后者表示您应该使用当前客户端的协议(通常是浏览器的http / https,但也可能是邮件客户端等)。考虑到网站同时运行http和https协议时,这种方法非常有用。 - Steve Perks
1
问题应该被明确化。仅省略协议会导致 URL 以“//”开头。这在 https://dev59.com/v3I-5IYBdhLWcg3wF0Qc 中有所讨论。 - koppor
3个回答

131
“http:”或“https:”的包含部分是传统问题,部分是实际指定协议的问题。如果未指定,将使用当前页面的协议;例如,//www.example.com 成为 http://www.example.comhttps://www.example.com 取决于引用页面的 URL。如果一个网页被保存在本地磁盘上然后从那里打开,它就没有协议(只有文件伪协议),因此像 //www.example.com 这样的 URL 将无法工作;这就是包含“http:”或“https:”的原因之一。
省略“//”部分也是一个完全不同的问题,它将把 URL 转换为相对 URL,这将被解释为相对于当前基本 URL。
www.example.com 之所以在浏览器地址栏中输入或粘贴时有效,是因为相对 URL 在那里没有意义(没有要关联的基本 URL),所以浏览器厂商决定在那里隐含“http://”前缀。

3

href中的URL不仅限于HTTP文档。它们支持浏览器支持的所有协议-如ftp、mailto、file等。

此外,您可以在URL名称前加上“#”,以在页面内部链接到html id。您可以只给出名称或目录路径,而无需协议,这将被视为相对URL。


1
我的解决方案是通过重定向服务来欺骗浏览器,例如bit.ly和goo.gl(即将停止),还有其他类似的服务。 当浏览器意识到快捷方式的URL是https时,它会自动释放链接图片,替换为http图片,而不显示原始链接。 令人烦恼的是,根据访问次数,它会在您的重定向控制面板中显示成千上万次“点击”,实际上是“展示”。 基于这个经验,我将寻找一个用于重定向的WordPress插件,并创建自己的“重定向链接”。这样我就可以把https://mysite.com/id重定向到http链接。

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