什么是shebang/hashbang用于什么?

3
除了让 AJAX 内容可被 Google 搜索外,井号(shebangs/hashbangs)还有其他用途吗?还是就只有这一个作用?

可能是What's the hashbang (#!) in Facebook and new Twitter URLs for?的重复问题。 - Kevin Brown-Silva
1个回答

19

在Ajax出现之前,网址中使用哈希标记已经存在很久了。它最初是用作页面内部的子节引用。在这种情况下,您可以在页面顶部有一个内容表,其中每个条目都是指向同一页不同部分的哈希链接。当单击这些链接时,页面会滚动到相关位置。

当浏览器接收到URL中有哈希的请求时,只会将哈希前面的部分发送给服务器。 哈希部分被浏览器保留以自行处理并滚动页面到相关位置。

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

Ajax出现后,人们开始希望能够在其网站上拥有一个单独的页面,但仍然可以通过外部链接直接访问相关内容。

开发人员很快意识到现有的哈希语法可以为他们完成此操作,因为可以从javascript中读取URL的哈希值。然后,只需在看到哈希标记时停止滚动(这很容易),你就可以得到一个在浏览器中被忽略但可以被javascript读取和写入的URL片段; 这对于与Ajax一起使用非常完美。 Google将URL的哈希部分包含在其搜索中,这最初只是一种幸运的额外奖励,但随着该技术变得更加普及,它变得非常重要。

我注意到人们将这种哈希语法称为“shebang”或“hashbang”,但从技术上讲,这是不正确的;它只是一个相关的哈希 - “hashbang”中的“bang”指的是感叹号(“bang”是印刷行业的术语)。某些网址确实会在哈希后面添加一个感叹号,但是对于浏览器来说只有哈希是相关的;其后的字符串完全由站点的作者决定; 它可以包括感叹号,也可以不包括,但无论哪种方式,浏览器都不会对其进行任何处理。如果您愿意,可以继续称之为hashbang或shebang,但请了解只有哈希具有重要意义。 实际术语“shebang”或“hashbang”远古时期就已经出现了,并且确实涉及到#! 语法,但并非在URL的上下文中。 这个术语最初的含义是,将这些符号用于Unix脚本文件的开头,以告诉脚本处理器脚本是用什么编程语言编写的。 所以,这确实是对您提出的问题的回答,但可能与您的意思无关,因为它与URL没有任何关系。

1
哇,解释得真好,非常感谢! - federico-t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接