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

时间:2012-01-25 04:24:08

标签: html

<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>

这种行为的理由是什么?

3 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:9)

2016年3月2日更新:

只需对所有内容使用HTTPS,例如:https://www.example.com

Paul Irish recommends against using protocol-relative URLs,即//,并建议使用https://撰写所有链接 - 理由为:

  

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

     

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


原帖:

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

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

答案 2 :(得分:3)

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

浏览器不知道您的意思是ftp://www.stackoverflow.comhttp://www.stackoverflow.com还是其他什么,所以您需要指定。