與Googbot的第一次約會(huì):標(biāo)頭和壓縮




本文翻譯自:First date with the Googlebot: Headers and compression
谷歌機(jī)器人 -- 多么神奇的夢(mèng)幻之舟!他了解我們的靈魂和各個(gè)組成部分?;蛟S他并不尋求什么獨(dú)一無(wú)二的東西;他閱覽過(guò)其它數(shù)十億個(gè)網(wǎng)站(雖然我們也與其他搜索引擎機(jī)器人分享自己的數(shù)據(jù):)),但是就在今晚,作為網(wǎng)站和谷歌機(jī)器人,我們將真正地了解對(duì)方。
我知道第一次約會(huì)的時(shí)候,過(guò)分地分析從來(lái)就不是什么好主意。我們將通過(guò)一系列的文章,一點(diǎn)點(diǎn)地了解谷歌機(jī)器人:
我們的第一次約會(huì)(就在今晚):谷歌機(jī)器人發(fā)出的數(shù)據(jù)標(biāo)頭和他所留意到的文件格式是否適于被進(jìn)行壓縮處理;
判斷他的反應(yīng):響應(yīng)代碼(301s、302s),他如何處理重定向和If-Modified-Since;
下一步:隨著鏈接,讓他爬行得更快或者更慢(這樣他就不會(huì)興奮地過(guò)了頭)。
今晚只是我們的第一次約會(huì)……
***************
谷歌機(jī)器人: 命令正確應(yīng)答
網(wǎng)站: 谷歌機(jī)器人,你來(lái)了!
谷歌機(jī)器人:是的,我來(lái)了!
GET / HTTP/1.1
Host: example.com
Connection: Keep-alive
Accept: */*
From: googlebot(at)googlebot.com
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Accept-Encoding: gzip,deflate
網(wǎng)站: 這些標(biāo)頭太炫了!無(wú)論我的網(wǎng)站在美國(guó)、亞洲還是歐洲,你都用同樣的標(biāo)頭爬行嗎?你曾經(jīng)用過(guò)其他標(biāo)頭嗎?
谷歌機(jī)器人: 一般而言,我在全球各地所用的標(biāo)頭都保持一致。我試圖從一個(gè)網(wǎng)站默認(rèn)的語(yǔ)言和設(shè)定出發(fā),搞清楚一個(gè)網(wǎng)頁(yè)究竟長(zhǎng)得什么樣。有時(shí)候人們的用戶代理各不相同,例如Adsense讀取使用的是“Mediapartners-Google”:
User-Agent: Mediapartners-Google
或者對(duì)于圖像搜索:
User-Agent: Googlebot-Image/1.0
無(wú)線讀取的用戶代理因運(yùn)營(yíng)商而異,而谷歌閱讀器RSS讀取則包含了訂閱者數(shù)量等額外信息。
我通常會(huì)避免Cookies(因此不存在所謂“Cookie:”標(biāo)頭),因?yàn)槲也⒉幌Mc具體對(duì)話有關(guān)的信息對(duì)內(nèi)容產(chǎn)生太大的影響。此外,如果某個(gè)服務(wù)器在動(dòng)態(tài)URL而不是Cookies上使用對(duì)話ID,通常我都能識(shí)別出來(lái),這樣就不用因?yàn)槊看螌?duì)話ID的不同而成千上萬(wàn)遍地重復(fù)爬行同一個(gè)網(wǎng)頁(yè)。
網(wǎng)站:我的結(jié)構(gòu)非常復(fù)雜。我是用許多類型的文件。你的標(biāo)頭說(shuō):“Accept:*/*”。你會(huì)對(duì)所有的URL進(jìn)行收錄,還是自動(dòng)過(guò)濾某些文件擴(kuò)展名?
谷歌機(jī)器人:這要取決于我想找什么。
如果我只是對(duì)常規(guī)的Web搜索進(jìn)行檢索,當(dāng)我看到指向MP3和視頻內(nèi)容的鏈接,我可能不會(huì)下載這些東西。類似地,如果我看到了一個(gè)JPG文件,處理方法自然 就與HTML或者PDF鏈接有所區(qū)別。例如JPG 的變動(dòng)頻率往往比HTML低很多,所以我不太經(jīng)常檢查JPG的變動(dòng),以節(jié)約帶寬。同時(shí),如果我為谷歌學(xué)術(shù)搜索尋找鏈接,那么我對(duì)PDF文章的興趣就會(huì)遠(yuǎn)遠(yuǎn)高于對(duì)JPG文件的興趣。對(duì)于學(xué)者而言,下載涂鴉繪畫(例如JPG),或者是關(guān)于小狗玩滑板的視頻,是容易讓他們分散注意力的,你說(shuō)對(duì)嗎?
網(wǎng)站:沒(méi)錯(cuò),他們可能會(huì)覺(jué)得被打擾到了。你的敬業(yè)精神令我佩服得五體投地。我自己就喜歡涂鴉繪畫(JPG),很難抗拒它們的誘惑力。
谷歌機(jī)器人:我也一樣。實(shí)際上我并不是一直都在做學(xué)問(wèn)。如果我為搜索圖像而爬行,就會(huì)對(duì)JPG非常感興趣,碰到新聞,我會(huì)花大力氣考察HTML和它們附近的圖像。
還有很多擴(kuò)展名,例如exe、dll、zip、dmg等,它們對(duì)于搜索引擎而言,既數(shù)量龐大,又沒(méi)有多大用處。
網(wǎng)站:如果你看到我的URL“http://www.example.com/page1.LOL111”,(嗚噎著說(shuō))你會(huì)不會(huì)只是因?yàn)槔锩姘粗奈募U(kuò)展名就把它拒之門外呢?
谷歌機(jī)器人: 網(wǎng)站老兄,讓我給你講點(diǎn)背景知識(shí)吧。一個(gè)文件真正下載完成后,我會(huì)使用“內(nèi)容—類別”(Content-Type)標(biāo)頭來(lái)檢查它屬于HTML、圖像、文本還是別的什么東西。如果它是PDF、Word文檔或Excel工作表等特殊的數(shù)據(jù)類型,我會(huì)確認(rèn)它的格式是否合法有效,并從中抽取文本內(nèi)容。但是你永遠(yuǎn)也不能確定里面是否含有病毒。但是如果文檔或數(shù)據(jù)類型混亂不清,我除了把它們?nèi)拥糁?,也沒(méi)有什么更好的辦法。
所以,如果我爬行你的“http://www.example.com/page1.LOL111”URL并發(fā)現(xiàn)未知文件擴(kuò)展名時(shí),我可能會(huì)首先把它下載。 如果我從標(biāo)頭中無(wú)法弄清內(nèi)容類型,或者它屬于我們拒絕檢索的文件格式(例如MP3),那么只能把它放在一邊了。除此之外,我們會(huì)接著對(duì)文件進(jìn)行爬行。
網(wǎng)站:谷歌機(jī)器人,我很抱歉對(duì)你的工作風(fēng)格“雞蛋里挑骨頭”,但我注意到你的“Accept-Encoding”標(biāo)頭這樣說(shuō):
Accept-Encoding: gzip,deflate
你能跟我說(shuō)說(shuō)這些標(biāo)頭是怎么回事嗎?
谷歌機(jī)器人:當(dāng)然。所有的主流搜索引擎和WEB瀏覽器都支持對(duì)內(nèi)容進(jìn)行g(shù)zip壓縮,以節(jié)約帶寬。你或許還會(huì)碰到其它的一些類型,例如“x-gzip”(與“gzip”相同),“deflate”(我們也支持它)和“identity”(不支持)。
網(wǎng)站:你能更詳細(xì)地說(shuō)說(shuō)文件壓縮和“Accept-Encoding: gzip,deflate”嗎?我的許多URL都包含尺寸很大的Flash文件和美妙的圖像,不僅僅是HTML。如果我把一個(gè)比較大的文件加以壓縮,會(huì)不會(huì)有助于你更迅速地爬行呢?
谷歌機(jī)器人:對(duì)于這個(gè)問(wèn)題,并沒(méi)有一個(gè)簡(jiǎn)單的答案。首先,swf(Flash)、jpg、png、gif和pdf等文件格式本身已經(jīng)是壓縮過(guò)的了(而且還有專門的Flash 優(yōu)化器)。
網(wǎng)站:或許我已經(jīng)把自己的Flash文件進(jìn)行了壓縮,自己還不知道。很顯然,我的效率很高嘍。
谷歌機(jī)器人:Apache和IIS都提供了選項(xiàng),允許進(jìn)行g(shù)zip和deflate壓縮,當(dāng)然,節(jié)省帶寬的代價(jià)是對(duì)CPU資源的更多消耗。一般情況下,這項(xiàng)功能只適用于比較容易壓縮的文件,例如文本HTML/CSS/PHP內(nèi)容等。而且,只有在用戶的瀏覽器或者我(搜索引擎機(jī)器人)允許的情況下才可以使用。 就我個(gè)人而言,更傾向于“gzip”而不是“deflate”。Gzip的編碼過(guò)程相對(duì)可靠一些,因?yàn)樗粩嗟剡M(jìn)行加和檢查,并且保持完整的標(biāo)頭,不像 “deflate”那樣需要我在工作中不斷推測(cè)。除此之外,這兩種程序的壓縮算法語(yǔ)言都很相似。
如果你的服務(wù)器上有閑置的CPU資源,可以嘗試進(jìn)行壓縮(鏈接:Apache, IIS)。但是,如果你提供的是動(dòng)態(tài)內(nèi)容,而且服務(wù)器的CPU已經(jīng)處于滿負(fù)荷狀態(tài),我建議你還是不要這樣做。
網(wǎng)站:很長(zhǎng)見(jiàn)識(shí)。我很高興今晚你能來(lái)看我。感謝老天爺,我的robots.txt文件允許你能來(lái)。這個(gè)文件有時(shí)候就像對(duì)自己的子女過(guò)分保護(hù)的父母。
谷歌機(jī)器人:說(shuō)到這里,該見(jiàn)見(jiàn)父母大人了——它就是robots.txt。我曾經(jīng)見(jiàn)過(guò)不少發(fā)瘋的“父母”。其中有些實(shí)際上只是HTML錯(cuò)誤信息網(wǎng)頁(yè),而不是有效的robots.txt。有些文件里充滿了無(wú)窮無(wú)盡的重定向,而且可能指向完全不相關(guān)的站點(diǎn)。另外一些體積龐大,含有成千上萬(wàn)條單獨(dú)成行、各不相同的 URL。下面就是其中的一種有副作用的文件模式,在通常情況下,這個(gè)站點(diǎn)是希望我去爬行它的內(nèi)容的:
User-Agent: *
Allow: /
然而,在某個(gè)用戶流量的高峰時(shí)段,這個(gè)站點(diǎn)轉(zhuǎn)而將它的robots.txt切換到限制性極強(qiáng)的機(jī)制上:
# Can you go away for a while? I'll let you back
# again in the future. Really, I promise!
User-Agent: *
Disallow: /
上述robots.txt文件切換的問(wèn)題在于,一旦我看到這種限制性很強(qiáng)的robots.txt,有可能使我不得不把索引中已經(jīng)爬行的該網(wǎng)站內(nèi)容舍棄掉。當(dāng)我再次被批準(zhǔn)進(jìn)入這個(gè)站點(diǎn)的時(shí)候,我不得不將原先的許多內(nèi)容重新爬行一遍,至少會(huì)暫時(shí)出現(xiàn)503錯(cuò)誤相應(yīng)代碼。
一 般來(lái)說(shuō),我每天只能重新檢查一次robots.txt(否則,在許多虛擬主機(jī)站點(diǎn)上,我會(huì)將一大部分時(shí)間花在讀取robots.txt文件上,要知道沒(méi)有 多少約會(huì)對(duì)象喜歡如此頻繁地拜見(jiàn)對(duì)方父母的)。站長(zhǎng)們通過(guò)robots.txt 切換的方式來(lái)控制爬行頻率是有副作用的,更好的辦法是用網(wǎng)站管理員工具將爬行頻率調(diào)至“較低”即可。
谷歌機(jī)器人: 網(wǎng)站老兄,謝謝你提出的這些問(wèn)題,你一直做得很不錯(cuò),但我現(xiàn)在不得不說(shuō)“再見(jiàn),我的愛(ài)人”了。
網(wǎng)站:哦,谷歌機(jī)器人…(結(jié)束應(yīng)答):)