哪个部分从url中省略了哈希片段,或者为什么爬网程序不简单地发送片段



前几天有人问我一个简单的问题,我很惊讶我不知道答案,也很难在网上找到。

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

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

在维基百科上,他们说Clients are not supposed to send URI-fragments to servers when they retrieve a document

由此我了解到浏览器会删除片段,curl会删除片段和wget

另一方面,爬网程序存在整个SEO问题,他们识别#!组合,然后将其转换为_escaped_fragment_-,但这是我没有得到的-为什么爬网程序不简单地发送片段??为什么要那么麻烦?如果一些客户真的发送了碎片,生活会不会更轻松?

我只能假设服务器(nginx、apachehttp、nodehttp等应用程序服务器、rails等)剥离了片段,但我不明白背后的动机,为什么要这样做?

有人能给我解释一下吗?

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

显然,这正是HTTP1.1规范所说的。。。每个人(浏览器供应商)";应该";遵守规范。其背后的主要原因是披露用户个人信息的安全隐患。你可以浏览一下规格,我相信你会更清楚的。例如,在闭包5.5.2中,您可以看到与referer头相关的语句。。。

用户代理不得包含生成Referer字段时的URI引用[RFC3986](如果有)价值

另一个例子是闭包9.5中与重定向有关。。。

这可能会产生向另一个站点公开一个站点的片段。如果第一个站点以碎片形式使用个人信息,应确保重定向到其他站点包括一个(可能为空)片段组件,以阻止该继承

安全含义很清楚,但如果你仍然不理解安全含义,至少你应该相信它并遵循规范。。。这就是浏览器供应商所做的(好吧,有时),他们遵循规范

您的第二个问题与ajax请求、爬网程序和片段有关,仍然与上述规范有关。规范规定客户端不得向服务器发送片段。什么是爬行器?客户端请求数据,因此同样适用。所以,对于你的这个问题/陈述。。。

如果一些客户真的发送了碎片,生活会不会更轻松?

答案(基于以上)是否定的,如果没有安全问题和心怀不轨的人,生活会更轻松。

爬网程序可能需要对使用片段的ajax页面进行爬网。然而,为了能够从服务器(据说不理解片段)请求该内容,他们使用了一个查询字符串变量(_escaped_fragment_),您的服务器需要知道如何处理该查询字符串,换句话说,您需要实现它,您需要响应该请求,就好像它是来自用户浏览器的ajax请求一样。你可以在谷歌网站管理员文档中阅读更多信息

如果你仍然有理解它的问题,只需问什么仍然不清楚。但是要友善;)。。。我没有编写http1.1规范,也不是绝对的专家。

相关内容

最新更新