为何使用#!而不是Ajax请求中的#?

时间:2012-11-03 07:55:45

标签: javascript ajax browser-history

  

可能重复:
  What’s the shebang/hashbang (#!) in Facebook and new Twitter URLs for?

我在几个使用Ajax请求加载页面的基于Web的应用程序中看到,他们在网址后使用#!而不是#。例如:/boo.php#!Projects而不是/boo.php#Projects

我想知道,是否有任何技术原因可以这样做?

3 个答案:

答案 0 :(得分:1)

这是因为hashbang / shebang(#!)是用于索引AJAX页面的Googles方案:

  

当您的网站采用该方案时,它将被视为“AJAX   可抓取。“这意味着抓取工具会看到您的内容   应用程序,如果您的网站提供HTML快照。

有关Google Developers的更多信息。

答案 1 :(得分:1)

这被称为" hashbang"。它被Google用于索引基于Ajax的网站。更多信息 - http://www.fakingfantastic.com/2011/02/09/using-hash-bangs-in-your-urls/

答案 2 :(得分:1)

目的是使AJAX页面可被抓取,例如谷歌。

通常,URL中哈希后面的所有内容与爬虫无关,并且根本不会发送到服务器。在AJAX应用程序中,它过去常被用于“模拟”浏览器地址栏中的真实URL(人们现在通常使用history.pushState)。

为了解决不执行完整JavaScript应用程序的限制,Google发明了一种协议,该协议基本上表明如果遇到包含像

这样的hashbang的URL
http://example.com/foo#!key=value

它可以将其转换为

http://example.com/foo?_escaped_fragment_=key=value

并将其发送到服务器。然后,服务器将返回页面的表示,因为它将在JavaScript应用程序中显示。最后,让这些应用程序可以抓取只是一种约定。

有关详细信息,请参阅Google的documentation on the topic