什么是shebang/hashbang?

fed*_*o-t 2 ajax web-crawler google-crawlers hashbang

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

Spu*_*ley 13

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

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

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

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

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

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

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

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

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

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