2

除了使 AJAX 内容可被 Google 抓取之外,shebangs/hashbangs 还有其他用途吗?或者就是这样?

4

1 回答 1

16

早在 Ajax 发明之前,在 URL 中使用的哈希就已经存在了。

它最初旨在作为对页面中子部分的引用。例如,在这种情况下,您将在页面顶部有一个目录,每个目录都是指向同一页面部分的哈希链接。当您单击这些链接时,页面会向下(或向上)滚动到相关标记。

当浏览器接收到一个带有散列的 URL 时,只有散列之前的地址部分作为页面请求发送到服务器。哈希部分由浏览器自己处理并将页面滚动到相关位置。

这是哈希语法最初的用途,因此这是您问题的直接答案。但我会继续解释一下我们是如何从那里走到现在的……

当 Ajax 被发明时,人们开始想方设法在他们的网站上拥有一个页面,但仍然有人们可以从外部单击以直接访问相关内容的链接。

开发人员很快意识到现有的哈希语法可以为他们做到这一点,因为可以从 javascript 中读取 URL 的哈希值。你所要做的就是在它看到一个散列时阻止它滚动(这很容易),并且你有一些被浏览器有效忽略的 URL,但可以通过 javascript 读取和写入; 非常适合与 Ajax 一起使用。Google 在其搜索中包含 URL 的哈希部分这一事实一开始只是一个幸运的奖励,但随着该技术变得更加普遍,这一事实变得非常重要。

我注意到人们将这种哈希语法称为“shebang”或“hashbang”,但从技术上讲这是不正确的;它只是一个相关的哈希值——“hashbang”这个词的“bang”部分指的是一个感叹号(“bang”是它的印刷行业术语)。有些网址可能确实会在哈希后添加感叹号,但只有哈希与浏览器相关;后面的字符串完全取决于网站的作者;根据他们的选择,它可能包含或不包含感叹号,但无论哪种方式,浏览器都不会对它做任何事情。如果您愿意,请随意将其称为 hashbang 或 shebang,但要了解只有 hash 才是重要的。

实际的术语“shebang”或“hashbang”可以追溯到更远的地方,并且确实指的是一种#!语法,但不是在 URL 的上下文中。

该术语的原始含义是这些符号用于 Unix 脚本文件的开头,以告诉脚本处理器脚本是用哪种编程语言编写的。

因此,这确实是您的问题的答案,您的措辞方式,但可能不是您的意思,因为它与 URL 完全无关。

于 2011-10-21T08:41:40.610 回答