什么是shebang / hashbang?

时间:2011-10-21 07:07:05

标签: ajax web-crawler google-crawlers hashbang

除了为Google制作可抓取的AJAX内容之外,还有其他什么用于shebangs / hashbangs吗?或者就是这样吗?

1 个答案:

答案 0 :(得分:12)

在Ajax发明之前很久就存在了在URL中使用的哈希值。

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

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

这是哈希语法最初的用途,因此这是您问题的直接答案。但我会继续说明我们如何从那里到现在的位置......

当Ajax被发明时,人们开始想要找到在他们的网站上有一个页面的方法,但仍然有人们可以在外部点击的链接直接到达相关内容。

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

我注意到人们将这种哈希语法称为“shebang”或“hashbang”,但从技术上讲这是不正确的;它只是一个相关的哈希 - “hashbang”这个词的“bang”部分是指一个感叹号('bang'是印刷业的术语)。有些URL确实可以在散列后添加感叹号,但只有散列与浏览器相关;字符串完全取决于网站的作者;它可能包括一个感叹号或不包括他们选择的感叹号,但无论哪种方式,浏览器都不会对它做任何事情。如果你愿意,可以随意将它称为hashbang或shebang,但要明白只有哈希是有意义的。

实际术语“shebang”或“hashbang”可以追溯到很多,并且确实引用#!语法,但不是在URL的上下文中。

这个术语的原始含义是在Unix脚本文件的开头使用这些符号,告诉脚本处理器编写脚本的编程语言。

所以这确实是你问题的答案,你的措辞方式,但可能不是你的意思,因为它根本与URL无关。