Ошибка 330 (net :: ERR_CONTENT_DECODING_FAILED):


98

Недавно мы перешли на новый сервер. Через 2 дня у меня возникли следующие проблемы

1) У нас произошел сбой сеансового стола, который мы легко исправили, отремонтировав его.

2) Мы запускаем OpenX в качестве нашего рекламного сервера, и он также дал сбой, но в error.log нет никаких доказательств. Это позволяет вам войти в систему, но в момент просмотра dashboard.php мы получаем:

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

и

Страница, которую вы пытаетесь просмотреть, не может быть отображена, потому что она использует недопустимую или неподдерживаемую форму сжатия. (Fire Fox)


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расширение, либо расширение pgsql. mysqliРасширение не поддерживается. Расширение ZLib для преобразования ссылок внутри сжатых файлов Flash, созданных с помощью Flash MX. Расширение FTP. Если его нет, OpenX попытается смоделировать его, что может быть менее стабильным решением.

Расширение GD для создания графиков на домашней странице. Если расширение не включено, вы не сможете просматривать графики или статистику на своей домашней странице. Для входа на главную страницу требуется расширение openssl или расширение curl с поддержкой SSL. Если SSL не включен, вы получите сообщение об ошибке на домашней странице, но это не повлияет на работу.


Мы будем очень благодарны за любую подсказку о возможных причинах или о том, как собрать дополнительную информацию. Спасибо

Ответы:


133

Это происходит, когда в заголовках вашего HTTP-запроса утверждается, что содержимое закодировано с помощью gzip, но это не так. Отключите настройку кодирования gzip или убедитесь, что содержимое действительно закодировано.


Это устранило мою проблему, спасибо. Мне просто любопытно, знает ли кто-нибудь, возникнет ли эта ошибка, если используемый вами браузер не поддерживает сжатие gzip?
Lightbulb1

6
Я столкнулся с этой проблемой, когда php выводил предупреждение в виде обычного текста над сжатым содержимым.
Майк Кузер

У меня была эта проблема, когда простой текстовый файл застрял в кеше apache, но браузеры ожидали сжатого содержимого
Людевит


21

коды должны сохранять UTF8 без спецификации во время записи. Иногда эта ошибка возникает при написании кода с помощью (Notepad ++) или других инструментов кодирования и использовании кодировки UTF8. Простите, я не знаю английский. Это просто мой опыт.


+1 Это тоже была моя проблема. Пришлось выполнить жесткую перезагрузку, потому что я недостаточно быстро нажал Shift-escape :(. До сих пор не знаю, почему файл не был закодирован в формате utf-8 (возвышенный текст 3, сборка 3083). Проверенные значения по умолчанию, и это было utf- 8. Может, я случайно
нажал

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();
?>

Он работает вместе с включением zlib.output_compression в php.ini. Между прочим - [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Конфигурации будет установлен заголовок , и это на сервер веб - приложений для обеспечения , что в выходных данных . Я пытался установить $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-10768958 из Drupalсообщества.

И цитирую:

редактировать

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

Еще одна идея для всех, кто это получит ...

У меня был сжатый сжатый файл svg, но на выходе была ошибка php, которая вызвала это сообщение об ошибке. (Потому что в середине двоичного файла gzip был текст.) Исправление ошибки php решило ее.


Согласен, проверьте все журналы ошибок PHP перед включением сжатия. Особенно, если вы недавно не отключили сжатие zlib и теперь получаете сообщение об ошибке. Просто исправлен неверный запрос к БД, который вызывал ту же ошибку. Включение zlib.output_compressionпросто дало мне браузер, полный мусорных символов.
Берт

2

Включите сжатие gzip в php.ini :

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

Я столкнулся с этой проблемой на site и никакие другие решения в этой теме не помогли. После устранения неполадок я обнаружил, что у 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 Debugger.

Для меня проблема заключалась в том, что я неправильно ввел символ в один из файлов PHP в проекте. Я не заметил этого, пока не проверил Git на предмет изменений в проекте.

В моем случае я имел: m<?php runMyProgram(); ?>.

Как только я стер m, он снова заработал.


пустое место перед открытым тегом php может вызвать ту же ошибку.
deepcell

1

В моем случае это произошло при добавлении нового приложения в IIS, которое нужно было проксировать с помощью Apache.

Мне нужно установить , ProxyHTMLEnable Onчтобы ProxyHTMLEnable 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 всякий раз, когда вы попадаете на этот маршрут / страницу.

Удачи!


0

Я видел эту ошибку в сочетании с включенным модулем PageSpeed. Модуль PageSpeed ​​имеет кеш, который можно сжать с помощью gzip. Очевидно, что может случиться двойное сжатие контента.

Чтобы перезаписать ресурсы, PageSpeed ​​должен кэшировать их на стороне сервера. До 1.10.33.0 эти ресурсы хранились в несжатом виде. Чтобы уменьшить использование диска, уменьшить время ожидания сервера, поддерживать более высокие уровни сжатия и увеличить пропускную способность сервера, HTTPCache может автоматически сжимать сжимаемые ресурсы с помощью gzip, поскольку они хранятся в кэше. Чтобы настроить сжатие кеша, установите для HttpCacheCompressionLevel значения от -1 до 9, где 0 - выключено, -1 - сжатие по умолчанию gzip, а 9 - максимальное сжатие. Значение по умолчанию - 9, максимальное сжатие.

Я решил это, добавив эту строку в свою конфигурацию PageSpeed:

HttpCacheCompressionLevel 0

который отключает сжатие.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.