错误330(net :: ERR_CONTENT_DECODING_FAILED):


98

最近,我们迁移到了新服务器。2天后,出现以下问题

1)我们在会话表上发生了崩溃,可以通过对其进行修复来轻松解决

2)我们以OpenX作为广告服务器运行,它也崩溃了,但是没有错误的证据。log让您登录,但是在寻找dashboard.php的那一刻,我们得到了:

Error 330 (net::ERR_CONTENT_DECODING_FAILED): (Google Chrome)

您尝试查看的页面使用无效或不受支持的压缩形式,因此无法显示。(Firefox)


OpenX在PHP上使用以下服务:

OpenX要求:http : //www.openx.com/docs/2.8/adminguide/System%20requirements

OpenX使用默认的PHP设置。但是,服务器管理员有时会更改这些设置。在安装OpenX之前,请检查以下设置是否正确:

magic_quotes_runtime必须关闭safe_mode必须关闭register_argc_argv如果要通过命令行运行维护,则必须打开file_uploads才能允许HTTP文件上传OpenX需要以下PHP扩展:

无论是mysql扩展,或者pgsqlmysqli不支持该扩展名。ZLib扩展名,用于转换所生成的压缩Flash文件中的链接Flash MX。FTP扩展名。如果不存在,OpenX将尝试对其进行仿真,这可能是一个不太稳定的解决方案。

GD扩展,用于在主页上生成图形。如果未启用扩展名,则将无法在主页上查看图形或统计信息。必须使用openssl扩展名或启用SSL的curl扩展名才能登录到主页。如果未启用SSL,您将在主页上收到一条错误消息,但对操作没有影响。


任何可能的原因或如何收集更多信息的线索将不胜感激。谢谢

Answers:


133

当您的HTTP请求标头声称内容是gzip编码的,但是不是,则发生这种情况。关闭gzip编码设置或确保内容实际上已编码。


这解决了我的问题,谢谢。我只是好奇是否有人知道如果您使用的浏览器不支持gzip压缩会出现此错误?
Lightbulb1 2013年

6
当php在gzip压缩的内容上方输出纯文本警告时,我遇到了这个问题。
Mike Causer 2013年

当纯文本文件卡在apache缓存中时,我遇到了这个问题,但浏览器期望压缩的内容
Ljudevit 2014年


21

记录时,代码需要保存UTF8而无需BOM。有时,使用(Notepad ++)或其他编码工具编写的代码使用UTF8编码,则会发生此错误。抱歉,我不会英语。这只是我的经验。


+1这也是我的问题。必须进行一次硬重启,因为我没有足够快地按一下shift-escape :(。 8.也许我不小心按了ctrl-s之类的东西以其他格式保存...
R_Ice 2015年

7

由于添加了输出缓冲模块扩展(ob_gzhandler)而导致此错误。在开始ob_start()和结束ob_flush()时使用输出缓冲

<?php   
    ob_start( 'ob_gzhandler' ); 
    echo json_encode($array);
    ob_end_flush();
?>

用这个:

<?php   
    ob_start(); 
    echo json_encode($array);
    ob_flush();
?>

它与在php.ini中启用zlib.output_compression一起使用。顺便说一下-[PHP.net](php.net/manual/en/function.ob-gzhandler.php)指出,使用zlib.output_compression比ob_gzhandler()更可取。
克里斯蒂安·阿多哈安

5

如果要使用Codeigniter框架,则只需将其放入配置文件即可:

$config['compress_output'] = FALSE;

并在php.ini配置文件中使用:

zlib.output_compression=On

实际更改php.ini指令值即可解决此问题,因为这样做将强制所有输出为gzipped。该Codeigniter配置将设置报头和它是由Web应用程序服务器执行的是,在输出。我试着$config['compress_output'] = TRUE在保持的同时进行设定zlib.output_compression=On。它具有相同的效果。方向为+1。
codarrior

2

您使用该ob_start(ob_gzhandler)功能吗?如果是这样,并且在ob_start(ob_gzhandler)函数上方输出任何内容,则会收到此错误。您不能使用此功能或在此功能上方不输出内容。该ob_gzhandler回调函数将确定什么类型的编码器将接受的内容,并相应地返回它的输出。因此,如果在此函数上方输出内容,则内容的编码可能与的输出内容不同ob_gzhandler,从而导致此错误。


2

万一仍然有人在寻找这个令人讨厌的问题的原因,可以采用一种解决方案来固定引起该问题的文件。来自社区的https://www.drupal.org/node/1622904#comment-10768958Drupal

我引用:

编辑

includes/bootstrap.inc:

功能drupal_load()。这是一个简短的功能。查找以下行: include_once DRUPAL_ROOT . '/' . $filename; 临时替换为

ob_start();
include_once DRUPAL_ROOT . '/' . $filename;
$value = ob_get_contents();
ob_end_clean();
if ($value !== '') {
  $filename = check_plain($filename);
  $value = check_plain($value);
  print "File '$filename' produced unforgivable content: '$value'.";
  exit;
}

谢谢你 这帮助我找出了问题所在,因为我有一个自定义的drupal模块,其中没有代码。添加<?php修复它。
肖恩·班尼斯特

2

其他人得到的另一个想法...

我有一些gzip压缩的svg,但它的输出中有php错误,从而导致此错误消息。(因为gzip二进制文件的中间有文本。)修复php错误即可解决。


同意,在打开压缩之前检查所有PHP错误日志。特别是如果您最近没有关闭zlib压缩,而现在却遇到了错误。刚刚修复了导致此错误的错误数据库查询。启用zlib.output_compression只是给了我一个充满垃圾字符的浏览器。
Bert

2

php.ini中启用gzip压缩:

zlib.output_compression = On

并将其添加到您的.htaccess文件中:

<IfModule mod_deflate.c>
  # Compress HTML, CSS, JavaScript, Text, XML and fonts
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
  AddOutputFilterByType DEFLATE application/x-font
  AddOutputFilterByType DEFLATE application/x-font-opentype
  AddOutputFilterByType DEFLATE application/x-font-otf
  AddOutputFilterByType DEFLATE application/x-font-truetype
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE font/opentype
  AddOutputFilterByType DEFLATE font/otf
  AddOutputFilterByType DEFLATE font/ttf
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE image/x-icon
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml

  # Remove browser bugs (only needed for really old browsers)
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  Header append Vary User-Agent
</IfModule>

1

我在一个 网站,此线程中的其他解决方案均无济于事。经过一些故障排除后,我发现local.settings.php的结尾标记带有空格,如下所示:

<?php
$databases = array(
  'default' =>
  array (
    'default' =>
    array (
      'driver' => 'mysql',
      'database' => 'xxx',
      'username' => 'xxx',
      'password' => 'xxx',
      'port' => '',
      'host' => 'xxx',
    ),
  ),
);
?>
 

将local.settings.php更新为以下已解决的问题:

<?php
$databases = array(
  'default' =>
  array (
    'default' =>
    array (
      'driver' => 'mysql',
      'database' => 'xxx',
      'username' => 'xxx',
      'password' => 'xxx',
      'port' => '',
      'host' => 'xxx',
    ),
  ),
);

此处不需要关闭PHP标记“?>”。如果选择使用结束标记,则必须确保其后没有字符/空格。


1

今天早晨,当我意识到是什么原因导致我出现这个问题时,我感到有些无聊。

奇怪的是,该请求在Firefox和Chrome中都失败了,但是当我尝试通过Fiddler Web调试器进行访问时却有效。

对我来说,问题是我在项目中的一个PHP文件中错误键入了一个字符。直到我检查了Git对项目的更改后,我才注意到这一点。

就我而言,我有:m<?php runMyProgram(); ?>

一旦删除了m,它就会重新开始工作。


打开php标记之前的空白可能导致相同的错误。
deepcell

1

就我而言,这是在将新应用程序添加到IIS中并需要用Apache代理时发生的。

我需要设置ProxyHTMLEnable OnProxyHTMLEnable Off获取内容。(看起来某些js代码大多数已触发了该错误,但这至少给了我一些有用的方法。)

IIS正在发送页面内容 Content-Encoding: gzip

<Proxy "http://192.168.1.1:81">
    ProxyHTMLEnable On   #> change this to Off
    ProxyHTMLURLMap  ...  ...
</Proxy>

0

将系统升级到Revive时,我们也遇到了这个问题。开启GZIP之后,我们发现问题仍然存在。经过进一步调查,我们发现升级后文件权限不正确。一个简单的递归chmod就能解决问题。



0

一个更常见的答案是,您在压缩时会附加一些错误。解决方案是display_errors = Off在您的php.ini文件中设置(通过运行在终端中检查它是否处于打开状态,php --info并查找“ display_errors”)

那应该做。而且,如何发现实际的错误?每当您点击该路由/页面时,请检查您的PHP错误日志。

好运!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.