哪个部分省略了网址中的哈希片段,或者为什么抓取工具不会简单地发送片段?

时间:2014-09-24 07:30:27

标签: http fragment

前几天我被问到一个简单的问题,我很惊讶我不知道答案,也不能轻易在网上找到答案。

我知道网址中的片段无法到达后端。但是我不清楚谁会在到达后端之前从URL中剥离该部分。

我希望我的问题非常明确,因为我正在寻找一个非常明确的答案:

In wikipedia they say Clients are not supposed to send URI-fragments to servers when they retrieve a document

据我所知,浏览器删除了片段,curl删除了该片段,wget等。

另一方面,搜索引擎的整个搜索引擎优化问题,他们识别#!组合,然后将其转换为_escaped_fragment_ - ,但这就是我所不知道的#39; t get - 为什么抓取器只是发送片段?为什么要去那么麻烦?如果某些客户端DID发送片段,那么生活会变得更容易吗?

我只能假设服务器(nginx,apache http,应用服务器,如节点http,rails等)剥离了片段,但我不理解它背后的动机,为什么要这样做?

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

  

我知道网址中的片段无法到达后端。但我不清楚谁会在到达后端之前从URL中删除该部分。

显然,这正是HTTP 1.1 Specification所说的......每个人(浏览器供应商)都应“遵守规范”。其背后的主要原因是披露用户个人信息的安全隐患。您可以查看规格,我很确定它会让您更清楚。例如,在closure 5.5.2中,您可以看到与referer标题相关的此语句...

  

用户代理不得包含的片段和userinfo组件      生成Referer字段时的URI引用[RFC3986](如果有)      值。

另一个例子是closure 9.5与重定向有关...

  

这可能会产生影响      将一个站点的片段泄露给另一个站点。如果是第一个网站      在片段中使用个人信息,它应该确保      重定向到其他站点包括(可能是空的)片段      组件以阻止该继承

安全隐患非常明确,但如果您仍然不了解安全隐患,至少应该信任并遵守规范......这就是浏览器供应商所做的事情(有时候),它们遵循规范< / p>

与ajax请求,抓取工具和碎片相关的第二个问题仍然与上述规范有关。规范声明客户端不得将片段发送到服务器。什么是爬虫?客户端请求数据,因此同样适用。那么,对你的这个问题/陈述......

  如果某些客户端DID发送片段,

会不会更容易生活?

答案(基于上述情况)是否定的,如果没有安全问题和意图不好的人,生活会更容易。

抓取工具可能需要抓取使用片段的ajax页面。为了能够从服务器请求内容(据说不理解片段),他们使用查询字符串变量(_escaped_fragment_),但是,您的服务器需要知道如何处理该查询字符串,换句话说,您需要实现它,您需要响应该请求,就好像它是来自用户浏览器的ajax请求一样。您可以在Google Webmaster Docs

中详细了解相关信息

如果你仍然有理解它的问题,那就问一下还不清楚的是什么。但是要好一点;)...我没有编写http 1.1规范而不是绝对专家。