繁体   English   中英

为什么锚标记的href值需要http://预先填充到URL?

[英]Why does an anchor tag's href values need http:// preprended to the URL?

<a href="www.stackoverflow.com" target="_blank">click here</a>

单击站点HTML页面上的上述链接将尝试将用户带到

<site>/index.html/www.stackoverflow.com

如果以下工作正常

<a href="http://www.stackoverflow.com" target="_blank">click here</a>

这种行为的理由是什么?

有几种协议:HTTP,HTTPS,FILE,SSH,SSL,FTP。 此外,正如Jeremy所提到的,您很可能在服务器上有一个文件,其中包含您在HREF中输入的文本的确切名称。

基本上,如果没有/或协议,则假定没有协议的href中的任何文本都是相对路径。

2016年3月2日更新:

只需使用HTTPS即可,例如: https://www.example.comhttps://www.example.com

Paul Irish建议不要使用协议相对URL ,即// ,并建议使用https://编写所有链接 - 理由是:

现在,每个人都鼓励使用SSL,并且没有性能问题, 这种技术[协议相对URL]现在是一种反模式 如果您需要的资产在SSL上可用,则始终使用https:// asset。

允许通过HTTP请求代码段打开了攻击的大门,就像最近的Github Man-on-side攻击一样。 即使您的站点在HTTP上,请求HTTPS资产也始终是安全的,但反之则不然。


原帖:

正如其他答案所述,包括URI中的协议非常重要,否则您可能会遗漏URI的解释方式。 您可以将MP4视频文件命名为“www.something.com”而不是“video.mp4”,或者客户端可能尝试通过FTP访问您的网站,因为它猜错了协议。

正如Kolink在评论中指出的那样,您可以完全省略http:并使用// ,例如//www.example.com 它会停止混合内容安全错误(“此页面包含不安全的元素”)。 这样做是因为当用户通过HTTPS连接到当前页面时,浏览器将获取图像等资源,就像这些资产使用https://

如果您不使用协议(http,https,ftp,mailto等等),则链接将相对于当前请求URI。 它与href前缀为./表示此目录相同

浏览器地址栏是http://domain.com/questions/

<a href="www.stackoverflow.com"成为domain.com/questions/www.stackoverflow.com

<a href="./www.stackoverflow.com ”成为domain.com/questions/www.stackoverflow.com


如果你的前缀是/你将从域根<a href="www.stackoverflow.com"变为domain.com/www.stackoverflow.com


通过添加http://(或任何其他协议),浏览器知道此链接意味着在当前页面的外部。 它是一个绝对路径,因为它包含协议和完整路径信息。

<a href="http://www.stackoverflow.com"成为http://www.stackoverflow.com

链接也可以是协议相关的 ,以便轻松避免混合内容安全性错误。


此外,如果您在(*它必须是绝对URL)中指定<base href="http://domain.com/dir/"> ,那么href =和src =中的所有非协议前缀URL都将基于在该基本URL而不是当前页面上。

假设http://domain.com/questions/的相同地址栏和上面的<base set。

<img src="file.jpg"成为http://domain.com/dir/file.jpg <a href="www.stackoverflow.com" <img src="file.jpg" <a href="www.stackoverflow.com"成为http://domain.com/dir/www.stacoverflow.com

因为URL可以有任意数量的协议:

浏览器不知道你的意思是ftp : //www.stackoverflow.com,http: //ststoverflow.com等等,所以你需要指定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM