【问题标题】:Why does an anchor tag's href values need http:// preprended to the URL?为什么锚标记的 href 值需要在 URL 前添加 http://?
【发布时间】:2012-02-18 08:18:57
【问题描述】:
<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>

这种行为的基本原理是什么?

【问题讨论】:

  • 如果您的服务器上有一个名为 www.stackoverflow.com 的文件怎么办?
  • http:// 指定协议。它不是隐含的,即使网络浏览器试图通过自动添加它来让我们更容易。
  • 我明白了,但最好的方法是什么。如果我收到一个 url 列表,我是否应该将 https:// 附加到每个 URL。或者可能有更好的方法来实现它
  • 有没有HTML/Browser或者JS提供的方式来处理。

标签: html


【解决方案1】:

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

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

【讨论】:

  • // 指定相对于当前协议的路径;)
  • 好点。很少见,但值得一提的是彻底:)
  • 拥有/ 仍然是一个相对路径。只是它与域相关,而不是文件夹。如果您想彻底,只有指定协议的路径才是绝对路径。 ^_^
  • 如果你想获得技术,有完整路径、相对路径和绝对路径。以/ 开头的是完整路径,但我同意它们是相对于域的 :) 我猜绝对路径确实是唯一的路径,无论您如何看待它,它都只被一个名称调用。跨度>
  • 反正就是这样。我真的这么无聊吗?我应该工作!
【解决方案2】:

2016 年 3 月 2 日更新:

一切都使用 HTTPS,例如:https://www.example.com

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

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

允许 sn-p 通过 HTTP 请求为最近的 Github Man-on-the-side 攻击等攻击打开了大门。即使您的网站使用 HTTP,请求 HTTPS 资产始终是安全的,但反之则不然。


原帖:

正如其他答案所述,在 URI 中包含协议很重要,否则您将自行决定如何解释 URI。您的 MP4 视频文件可能按字面意思命名为“www.something.com”而不是“video.mp4”,或者客户端可能会尝试通过 FTP 访问您的网站,因为它猜测协议错误。

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

【讨论】:

    【解决方案3】:

    如果您不使用协议(http、https、ftp、mailto 等),链接将与当前请求 URI 相关。这与在 href 中添加 ./ 前缀相同,表示 此目录

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

    &lt;a href="www.stackoverflow.com" 变为 domain.com/questions/www.stackoverflow.com

    &lt;a href="./www.stackoverflow.com" 变为 domain.com/questions/www.stackoverflow.com


    如果您以 / 为前缀,您将从域根目录中获取 &lt;a href="www.stackoverflow.com" 变为 domain.com/www.stackoverflow.com


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

    &lt;a href="http://www.stackoverflow.com" 变为 http://www.stackoverflow.com

    链接也可以是protocol-relative,以便轻松避免混合内容安全错误。


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

    假设http://domain.com/questions/和上面设置的&lt;base地址栏相同。

    &lt;img src="file.jpg" 变为 http://domain.com/dir/file.jpg &lt;a href="www.stackoverflow.com" 变为 http://domain.com/dir/www.stacoverflow.com

    【讨论】:

      【解决方案4】:

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

      浏览器不知道你是指ftp://www.stackoverflow.comhttp://www.stackoverflow.com还是别的什么,所以你需要指定。

      【讨论】:

      • 有没有办法像添加一些属性/标志一样默认为http
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      相关资源
      最近更新 更多