'?' 与 '#!' 在URL中

Jak*_*zok 8 url http

可能重复:
Facebook中的shebang(#!)和新的Twitter URL是什么?

为什么有越来越多的网站(例如twitter或gawker)使用'#!' 代替 '?' 从URL的其余部分分离参数?有什么好处?

cee*_*yoz 6

它正在成为谷歌提出的一种标准方式,可以使AJAX Web应用程序可以抓取.


Ian*_*and 4

'?' 用于将 URL 的路径部分与查询部分分开。当浏览器请求此类资源时,这两个组件都会发送到 Web 服务器。服务器可以查看查询并确定发回什么响应。

“#”的用法不同——它将“片段”或“散列”组件与 URL 的其余部分分开。片段组件永远不会发送到 Web 服务器,但它可供页面中运行的任何脚本使用。

比较两个 URL,例如

http://www.example.com/service/?my+query
Run Code Online (Sandbox Code Playgroud)

http://www.example.com/service/#!my+query
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,整个 url 被发送到服务器,并返回响应。从浏览器一直到服务器的任何缓存都会看到查询字符串,并知道响应仅与该查询相关。他们可能会缓存该查询的响应,但更有可能根本不会缓存响应。

使用此方案,这意味着如果 example.com 是一项流行的服务,他们将必须向该服务的每个用户发送完整的响应,并且很可能他们的任何结果都不会缓存在任何地方。

在第二种情况下,仅http://www.example.com/service/使用路径组件,并且服务器(可能)将相同的文档返回给请求该 URL 的每个用户。上游缓存将能够缓存该文档,并将其提供给新用户,而无需针对每个请求返回原始 Web 服务器。

使用此方案,可能会在该文档上运行一些 JavaScript,它会查看该片段,然后从服务请求任何其他搜索结果。它们可能比整个页面小得多,从而减少服务器上的负载,或者它们可以是可缓存的结果,可供多个用户使用。

特定形式“#!”是 AJAX 式 Web 应用程序的新兴标准,因此它们的 URL 可以由搜索引擎索引,或由 Web 分析软件进行分析。实际的 URL 规范仅强制要求使用“#”字符,它也可以用于其他目的(例如文档中的命名锚点)。