GET,POST以及安全获取更多网络信息

2011年12月9日星期五

发表者: Pawel Aleksander Fedorynski 索引团队软件工程师; Maile Ohye 开发人员项目技术指导

随着网络的发展,谷歌的抓取和索引能力也需要与时俱进。我们 改善了flash索引 ,建立了一个更加强大的 Caffeine系统 我们甚至绘制了抓取表单 。现在,特别当 JavaScript AJAX 日渐普及后,我们发现越来越多的网页需要 POST 请求——因为网页的全部内容或因为有些网页信息缺失以及 / 或者 POST 无法返回资源而使网页无法显示。对于谷歌搜索来说,出现这一现象并不理想,因为如果我们没有正确地搜寻和索引内容,便无法呈现最全面、准确的结果。

通常情况下,我们建议使用 GET 来抓取网页所需资源,这是至今为止我们找到的最好的抓取方法。我们做过一些实验,将 POST 请求重新写入 GET ,在某些情形下,这是一种有效策略。一般说来,网络服务器从 GET POST 返回的结果是完全不同的。另外,使用 POST 还有一些合理的原因(比如使用过程中,比起 GET ,在 POST 请求中可以附加的数据更多)。因此,虽然 GET 请求仍然更普遍,但为了从网页上获取更多内容,Googlebot会执行 POST 请求,因为我们认为它既安全又合适。

为了避免在网站上执行任务而导致用户任何意想不到的操作,我们采取了一定的措施。 POST 主要是用来抓取与网页自动请求相关的资源,模仿一个普通用户在浏览器中打开网址所看到的内容。随着时间推移,我们会逐步发现更好的模式,但目前我们还是用这一方法。

下面我们来看一些 POST 请求脚本,来说明我们如何随着网络的发展而改进信息抓取和索引功能的。

Googlebot的 POST 请求范例

  • 通过 POST 重新定位抓取一个网页信息
<html>
<body onload="document.foo.submit();">
<form name="foo" action="request.php" method= "post" >
<input type="hidden" name="bar" value="234"/>
</form>
</body>
</html>


  • 通过 POST XMLHttp 请求抓取一条资源
    在这个逐步进行的例子中,我们按照 page renders 产生的自动 XMLHttp 请求,既改善了页面索引又改善了其即时预览效果。

1. 谷歌抓取到网址, yummy-sundae.html .

2. 谷歌开始索引 yummy-sundae.html ,在此过程中,尝试渲染页面以便更好地理解内容以及 / 或者产生即时预览。

3. 在渲染过程中, yummy-sundae.html 使用 POST 方法,自动发送一条 XMLHttp 请求资源, hot-fudge-info.html.


<html>
<head>
<title>Yummy Sundae</title>
<script src="jquery.js"></script>
</head>
<body>
This page is about a yummy sundae.
<div id="content"></div>
<script type="text/javascript">
$(document).ready(function() {
$. post ('hot-fudge-info.html', function(data)
{$('#content').html(data);});
});
</script>
</body>
</html>

4. 通过 POST 请求得到的网址 hot-fudge-info.html ,和其数据负载一起添加到Googlebot的抓取队列里。

5. Googlebot执行一个 POST 请求抓取 hot-fudge-info.html 网页信息。

6. 现在谷歌准确地呈现出一个可供即时预览的 yummy-sundae.html 网址。在某些情形下,我们还可以将 hot-fudge-info.htm 网址内容合并在 yummy-sundae.html 网址中。

7. 谷歌完成 yummy-sundae.html 网址的索引。

8. 用户搜索 [hot fudge sundae]

9. 现在谷歌算法能够更好地确定 yummy-sundae.html 与此请求的相关度,我们能够恰当地呈现网页快照来提供即时预览。

提高您网站的抓取和索引能力

在我们的 网站站长工具帮助 可以找到建立可抓取网页的常规建议。对于那些想帮助谷歌抓取和索引他们的网站内容以及 / 或者产生即时预览的网络管理员,以下建议可供参考:

  • 要获取资源,首选 GET ,除非有特殊原因需要使用 POST

  • 确保我们可以抓取所需资源来渲染你的页面。在上面的例子中,如果 hot-fudge-info.html 无法获得 robots.txt 的允许,Googlebot便不能获取资源。更微妙的是,如果发出 XMLHttp 请求的 JavaScript 代码位于外部 .js 文件,无法获得 robots.txt 的允许,我们便不能看到 yummy-sundae.html hot-fudge-info.html 两个网址的关联,所以即使 hot-fudge-info.html 网址本身不能获得允许,对我们也没有多大帮助。我们在纷繁的网络中甚至见到过更加复杂的相关性链接,允许Googlebot收集所有需要的信息有助于谷歌更好地理解您的网站。

    您可以通过 网站 管理员工具 “实验室 -> 即时预览 .” 来检测资源是否被锁定。

  • 确保返回给Googlebot的内容和返回到用户浏览器的内容相同。 隐藏真实内容 (发给Googlebot的内容与发给用户的不同)违反了 网站站长指南 ,因为,这会使我们向搜索者提供一个无关结果——用户在浏览器中看到的内容很可能与我们抓取和索引的内容完全不符。我们看到过许多 POST 请求的案例,网站管理员并无恶意的隐藏真实内容(这仍然是违反条例的),哪怕是最微小的改变,都会引起 JavaScript 错误,阻碍精确索引,且完全违背了最初隐藏真实内容的初衷。总的来说,如果你想让你的网站能够顺利索引,最好避免这种会引起麻烦的隐藏行为。

为了核实你没有不经意地隐藏真实内容,你可以使用网站管理员工具中的 即时预览 ,或者在浏览器中将你的用户 - 代理字符串设置成如下:

Mozilla/5.0 (compatible; Googlebot/2.1;
+https://www.google.com/bot.html)

如此改动后,网页应该没有任何变化。如果你看到一个空白页, JavaScript 错误,或者如果页面有一部分消失或者出现变化,就存在问题了。

  • 切记将重要内容(比如你要索引的内容)记录在文本中,在页面上能一眼看到,不需要用户操作就能显示。大部分搜索引擎都是基于文本的,这样与基于文本的页面内容配合都能起到最好的效果。虽然我们一直在改进对各种格式的内容进行抓取和索引的能力,但是对于重要的信息来说,最好还是使用文本格式。

控制你的内容

如果你想要阻止网页内容被谷歌网络搜索抓取或索引到,最好的办法是用传统的 robots.txt 文件 指令。


未来趋势

我们将继续努力,使我们的检索更加全面,以便搜索者能查到更多相关信息。我们希望我们的收集和检索能力随着时间逐步提高,如同网络本身在不断提高一样。如有疑问或问题,请与我们联系。