前几天我被问到一个简单的问题,我很惊讶我不知道答案,也不能轻易在网上找到答案。
我知道网址中的片段无法到达后端。但是我不清楚谁会在到达后端之前从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等)剥离了片段,但我不理解它背后的动机,为什么要这样做?
有人可以向我解释一下吗?
答案 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规范而不是绝对专家。