Firefox访问Google出现“内容编码错误”的原因

     最近Google各种问题,原因大家也是明白的,这里也不说了。前段时间在微博说过怎么正常使用google,这里提一下:1、去除hosts中google ip;2、使用非com.hk(比如co.jp、com.sg等);3、使用https(推荐扩展HTTPS Everywhere),而非http;4、使用去Google重定向脚本(如:Straight Google)。这样基本上能够正常使用google搜索了。

但是,虽说能够使用了,但时不时的还会出现小状况,比如这篇文中提到的“内容编码错误”。这个问题文摘也碰到过、网友也向蚊仔询问过,应该是普遍现象。

 

本文作者:@紫云妃 撰写,原文:《Google怎么了?

 

首先要说的是,本文只讨论技术。一段时间以来,Google搜索不好用,具体表现为:随机出现“页面乱码”或者“页面空白”或者“弹出下载对话框”。相对于其他浏览器中的空白页面,Firefox下的提示更加友好一点。


"无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式。"这句话很关键,我们一下就知道了问题所在:gzip压缩.

也许大部分人访问google都是通过域名http://www.google.com.hk来访问的,但这种方式应该放弃,原因你懂的,某些关键字不能搜。

下面我们进行试验。试验网址有两个:

1.http://74.125.71.94/

2.http://74.125.128.94/

第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,只要想办法自定义这些请求数据,这种数据被篡改的问题就能解决了。

本篇文章已有1条评论

  1. CzBiX 说:

    被重置和缓慢的原因就不说了, 提示编码错误或下载的原因是ISP往页面里插内容,但不支持gzip压缩过的数据,然后就导致CRC效验失败了..

发表评论

电子邮件地址不会被公开。 必填项已用*标注

想显示头像?本站支持Gravatar

Scroll Up