<a href="www.stackoverflow.com" target="_blank">click here</a>
Run Code Online (Sandbox Code Playgroud)
单击站点HTML页面上的上述链接将尝试将用户带到
<site>/index.html/www.stackoverflow.com
Run Code Online (Sandbox Code Playgroud)
如果以下工作正常
<a href="http://www.stackoverflow.com" target="_blank">click here</a>
Run Code Online (Sandbox Code Playgroud)
这种行为的理由是什么?
jmo*_*253 15
有几种协议:HTTP,HTTPS,FILE,SSH,SSL,FTP.此外,正如Jeremy所提到的,您很可能在服务器上有一个文件,其中包含您在HREF中输入的文本的确切名称.
基本上,如果没有协议,则假定没有协议的href中的任何文本都是相对路径/
.
2016年3月2日更新:
只需使用HTTPS即可,例如: https://www.example.com
Paul Irish建议不要使用协议相对URL,即//
建议使用以下方式编写所有链接https://
- 理由是:
现在,每个人都鼓励使用SSL,并且没有性能问题,这种技术[协议相对URL]现在是一种反模式.如果您需要的资产在SSL上可用,则始终使用该
https://
资产.允许通过HTTP请求代码段打开了攻击的大门,就像最近的Github Man-on-side攻击一样.即使您的站点在HTTP上,请求HTTPS资产也始终是安全的,但反之则不然.
原帖:
正如其他答案所述,包括URI中的协议非常重要,否则您可能会遗漏URI的解释方式.您可以将MP4视频文件命名为"www.something.com"而不是"video.mp4",或者客户端可能尝试通过FTP访问您的网站,因为它猜错了协议.
正如Kolink在评论中指出的那样,你可以省略http:
完全和公正的使用//
,例如//www.example.com
.它会停止混合内容安全错误("此页面包含不安全的元素").这样做是因为浏览器将获取图像等资源,就像https://
用户通过HTTPS连接到当前页面时那些资产一样.
小智 5
如果您不使用协议(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
链接也可以是协议相关的,以便轻松避免混合内容安全性错误.
此外,如果您<base href="http://domain.com/dir/">
在(*它必须是绝对URL)中指定,那么href =和src =中的所有非协议前缀URL将基于该基本URL而不是当前页面.
假设相同的地址栏http://domain.com/questions/
和<base
上面的设置.
<img src="file.jpg"
变得http://domain.com/dir/file.jpg
<a href="www.stackoverflow.com"
变得http://domain.com/dir/www.stacoverflow.com