在 URL 中使用的哈希早在 Ajax 发明之前就已经存在了。
它最初的目的是作为页面内子部分的引用。在这种情况下,例如,您将在页面顶部有一个目录,每个目录都是指向同一页面的某个部分的哈希链接。单击这些链接时,页面会向下(或向上)滚动到相关标记。
当浏览器收到包含哈希值的 URL 时,仅将哈希值之前的地址部分作为页面请求发送到服务器。哈希部分由浏览器保留以自行处理并将页面滚动到相关位置。
这就是哈希语法的最初用途,因此这是对您问题的直接答案。但我会继续解释一下我们是如何从那里走到现在的……
当 Ajax 发明时,人们开始想办法在自己的网站上拥有单个页面,但仍然拥有人们可以在外部单击以直接访问相关内容的链接。
开发人员很快意识到现有的哈希语法可以为他们做到这一点,因为可以从 JavaScript 中读取 URL 的哈希值。然后你所要做的就是当它看到一个哈希值时阻止它滚动(这很容易),并且你已经得到了一些被浏览器有效忽略的 URL,但可以由 javascript 读取和写入;非常适合与 Ajax 一起使用。事实上,谷歌在其搜索中包含 URL 的哈希部分一开始只是一个幸运的奖励,但随着该技术变得更加广泛,它变得非常重要。
我注意到人们将此哈希语法称为“shebang”或“hashbang”,但从技术上讲这是不正确的;它只是一个相关的哈希值——“hashbang”一词的“bang”部分指的是感叹号(“bang”是印刷行业的术语)。有些URL确实可能会在hash后面添加感叹号,但只有hash是与浏览器相关的;后面的字符串完全由网站作者决定;它可能包含感叹号,也可能不包含感叹号,具体取决于他们的选择,但无论哪种方式,浏览器都不会对其执行任何操作。如果您愿意,可以随意将其称为 hashbang 或 shebang,但要明白只有哈希才是重要的。
实际术语“shebang”或“hashbang”可以追溯到更远的地方,并且确实指的是#!
语法,但不在 URL 上下文中。
该术语的原始含义是在 Unix 脚本文件的开头使用这些符号,以告诉脚本处理器该脚本是用什么编程语言编写的。
所以这确实是你问题的答案,你的措辞方式,但可能不是你的意思,因为它与 URL 完全无关。