Google怎么了?
首先要说的是,本文只讨论技术.一段时间以来,Google搜索不好用,具体表现为:随机出现"页面乱码"或者"页面空白"或者"弹出下载对话框".相对于其他浏览器中的空白页面,Firefox下的提示更加友好一点.
"无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式。"这句话很关键,我们一下就知道了问题所在:gzip压缩.
也许大部分人访问google都是通过域名http://www.google.com.hk来访问的,但这种方式应该放弃,原因你懂的,某些关键字不能搜.
下面我们进行试验.试验网址有两个:
第1个IP地址是目前访问有问题的网址.
第2个IP地址是目前访问完全正常的网址.
打开Fiddler,访问第一个ip.Fiddler会报错,gzip解压失败.
第二个ip的访问正常.
然后我们使用Fiddler的数据保存功能,将响应分别保存成1.txt.gz和2.txt.gz.注意工具栏有个"Decode"按钮,要关闭.这是自动解压的功能.
首先尝试7-zip,1.txt.gz无法打开:
2.txt.gz正常.
再尝试用gzip命令.表现同样.
看来1.txt.gz真的解压不了了.压缩软件不能解压,浏览器也同样,所以页面才会出问题.
怎么解决呢?你可以使用第二个目前没有问题的ip网址.但仅限于目前.如何解决这种gzip数据被无明显规则随机篡改的问题呢.如果你了解http协议的话,应该知道,那就是Accept-Encoding: gzip,deflate
所有的现代浏览器都会无条件发送这个请求头,告诉服务器,该客户端支持浏览压缩后的文件.再用Fiddler看一下.
如果我们能把这个请求头去掉,服务器就应该返回未压缩的文件,因为这是标准(rfc2616),所有的服务器软件都应该会遵循(定制过的除外).
也就不会存在二进制数据被篡改的问题了.可是大部分浏览器应该没有这个设置选项,火狐的话,about:config中有一个选项network.http.accept-encoding,清空就可以了.但这种影响是全局的.我们应该只针对某些URL去掉这个请求头,能实现这种功能的扩展很多.你可以在AMO上搜索一下.最后记得要清除cookies,因为google会在cookies里存储一个"GZ=Z=0"或者"GZ=Z=1"的值,1表示支持gzip,0表示不支持,这个cookie的优先级比Accept-Encoding的优先级还高.也能利用这个原理让google服务器返回未压缩的文件.有兴趣的可以试验一下.
无论是cookies还是Accept-Encoding,只要想办法自定义这些请求数据,这种数据被篡改的问题就能解决了.