Błąd 330 (net :: ERR_CONTENT_DECODING_FAILED):

98

Niedawno przeprowadziliśmy migrację na nowy serwer. Po 2 dniach pojawiły się następujące problemy

1) Wystąpiła awaria na stole sesyjnym, którą łatwo naprawiliśmy

2) Uruchamiamy OpenX jako nasz serwer reklamowy, który również się zawiesił, ale nie ma dowodów na błąd.log Pozwala się zalogować, ale w momencie przeglądania dashboard.php otrzymujemy:

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

i

Strona, którą próbujesz wyświetlić, nie może zostać wyświetlona, ​​ponieważ używa nieprawidłowej lub nieobsługiwanej formy kompresji. (Firefox)


OpenX korzysta z następujących usług w PHP:

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

OpenX używa domyślnych ustawień PHP. Jednak administratorzy serwerów czasami zmieniają te ustawienia. Przed zainstalowaniem OpenX sprawdź, czy następujące ustawienia są prawidłowe:

magic_quotes_runtime musi być wyłączone safe_mode musi być wyłączone register_argc_argv musi być włączone, jeśli chcesz uruchomić konserwację za pomocą wiersza poleceń file_uploads musi być włączone, aby umożliwić przesyłanie plików HTTP OpenX wymaga następujących rozszerzeń PHP:

Albo mysqlrozszerzenie lub pgsql. mysqliRozszerzenie nie jest obsługiwany. Rozszerzenie ZLib do konwersji linków w skompresowanych plikach Flash generowanych przez Flash MX. Rozszerzenie FTP. Jeśli tego nie ma, OpenX spróbuje to zasymulować, co może być mniej stabilnym rozwiązaniem.

Rozszerzenie GD do generowania wykresów na stronie głównej. Jeśli rozszerzenie nie jest włączone, nie będziesz mógł przeglądać wykresów ani statystyk na swojej stronie głównej. Aby zalogować się na stronie głównej, wymagane jest rozszerzenie openssl lub rozszerzenie curl z obsługą SSL. Jeśli SSL nie jest włączony, na stronie głównej pojawi się komunikat o błędzie, ale nie ma to wpływu na operacje.


Wszelkie wskazówki dotyczące możliwych powodów lub sposobu gromadzenia większej ilości informacji będą bardzo mile widziane. Dzięki

user1929691
źródło

Odpowiedzi:

133

Dzieje się tak, gdy nagłówki żądania HTTP zawierają informację, że zawartość jest zakodowana w formacie gzip, ale tak nie jest. Wyłącz ustawienie kodowania gzip lub upewnij się, że zawartość jest rzeczywiście zakodowana.

JEDYNY
źródło
To rozwiązało mój problem, dziękuję. Jestem po prostu ciekawy, czy ktoś wie, czy to jest błąd, który pojawi się, jeśli przeglądarka, której używasz, nie obsługuje kompresji gzip?
Żarówka 1
6
Natknąłem się na ten problem, gdy php wyświetlało ostrzeżenie w postaci zwykłego tekstu nad zawartością spakowaną gzipem.
Mike Causer,
Miałem ten problem, gdy zwykły plik tekstowy utknął w pamięci podręcznej Apache, ale przeglądarki oczekiwały zawartości spakowanej gzipem
Ljudevit
54

Włączyłem zlib.output_compressionsię php.inii wydawało się rozwiązać ten problem dla mnie.

Francisco Cortes
źródło
Dla mnie też zadziałało. (quercus-4.0.39 + glassfish4 + ręcznie utwórz web-inf / php.ini.
Malcolm Boekhoff
21

kody muszą zapisywać UTF8 bez BOM podczas nagrywania. Czasami podczas pisania kodów za pomocą (Notepad ++) lub innych narzędzi do kodowania i używania kodowania UTF8 występuje ten błąd. Przepraszam, nie znam angielskiego. To tylko moje doświadczenie.

user259374
źródło
+1 To też był mój problem. Musiałem wykonać twardy restart, ponieważ nie nacisnąłem shift-escape wystarczająco szybko :(. Nadal nie wiem, dlaczego plik nie był zakodowany w utf-8 (sublime text 3 build 3083). Sprawdzono wartości domyślne i było to utf- 8. Może przypadkowo
wcisnąłem
7

Ten błąd spowodowany jest dodaniem rozszerzenia modułów buforujących wyjście (ob_gzhandler). Podczas buforowania wyjścia użyj przy uruchamianiu ob_start () i kończeniu ob_flush ()

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

Użyj tego:

<?php   
    ob_start(); 
    echo json_encode($array);
    ob_flush();
?>
sankar muniyappa
źródło
Działa razem z włączeniem zlib.output_compression w php.ini. Swoją drogą - [PHP.net] ( php.net/manual/en/function.ob-gzhandler.php ) zauważa, że ​​używanie zlib.output_compression jest lepsze niż ob_gzhandler ().
Kristjan Adojaan
5

Jeśli chcesz używać Codeigniterframeworka, po prostu umieść to w pliku konfiguracyjnym:

$config['compress_output'] = FALSE;

W php.inipliku konfiguracyjnym użyj:

zlib.output_compression=On
Kaushik Dey
źródło
Właściwie zmieniając wartości dyrektywy php.ini rozwiązuje problem, ponieważ spowoduje to wymuszenie wszystkich danych wyjściowych gzipped. CodeigniterConfig będzie ustawić nagłówek i to do serwera aplikacji WWW, aby wymusić na wyjściu. Próbowałem ustawić $config['compress_output'] = TRUE, zachowując zlib.output_compression=On. Ma ten sam efekt. +1 za kierunek.
codarrior
2

Czy używasz tej ob_start(ob_gzhandler)funkcji? Jeśli tak, i jeśli wypiszesz jakąkolwiek zawartość powyżej ob_start(ob_gzhandler)funkcji, otrzymasz ten błąd. Nie możesz używać tej funkcji lub nie wyświetlać zawartości powyżej tej funkcji. Funkcja ob_gzhandlerwywołania zwrotnego określi, jaki typ kodowania treści zaakceptuje przeglądarka i odpowiednio zwróci wynik. Więc jeśli wyprowadzasz zawartość powyżej tej funkcji, kodowanie zawartości może różnić się od zawartości wyjściowej ob_gzhandleri to powoduje ten błąd.

linjie
źródło
2

Na wypadek, gdyby ktoś nadal szukał przyczyny tego nienawistnego problemu, pojawia się rozwiązanie, które pozwoli naprawić plik. https://www.drupal.org/node/1622904#comment-10768958 ze Drupalspołeczności.

I cytuję:

Edytować

includes/bootstrap.inc:

funkcji drupal_load(). To krótka funkcja. Znajdź następujący wiersz: include_once DRUPAL_ROOT . '/' . $filename; tymczasowo zastąp go przez

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;
}
Hao
źródło
Dzięki za to. Pomogło mi to wyśledzić mój problem, miałem niestandardowy moduł drupal, który nie zawierał żadnego kodu. Dodanie <?phpnaprawiło to.
Sean Bannister
2

Jeszcze jeden pomysł dla każdego, kto to dostanie ...

Miałem plik svg spakowany gzipem, ale w danych wyjściowych pojawił się błąd php, który spowodował ten komunikat o błędzie. (Ponieważ w środku pliku binarnego gzip znajdował się tekst). Naprawienie błędu php rozwiązało problem.

Redzarf
źródło
Zgoda, sprawdź wszystkie dzienniki błędów PHP przed włączeniem kompresji. Zwłaszcza jeśli ostatnio nie wyłączyłeś kompresji zlib i teraz pojawia się błąd. Właśnie naprawiono złe zapytanie do bazy danych, które powodowało ten sam błąd. Włączenie zlib.output_compressionwłaśnie dało mi przeglądarkę pełną śmieciowych znaków.
Bert
2

Włącz kompresję gzip w php.ini :

zlib.output_compression = On

I dodaj to do swojego pliku .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>
kurdtpage
źródło
1

Miałem ten problem na site i żadne inne rozwiązania w tym wątku nie pomogły. Po rozwiązaniu problemu stwierdziłem, że plik local.settings.php ma zamykający znacznik ze spacją po nim:

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

Rozwiązano aktualizację local.settings.php do następującego:

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

Zamykający tag PHP „?>” Nie jest tu potrzebny. Jeśli zdecydujesz się użyć tagu zamykającego, upewnij się, że po nim nie ma żadnych znaków ani spacji.

Banan
źródło
1

Tego ranka miałem trochę atrapy, kiedy zdałem sobie sprawę, co spowodowało ten problem.

Dziwne jest to, że żądanie kończyło się niepowodzeniem zarówno w przeglądarce Firefox, jak i Chrome, ale działało, gdy próbowałem uzyskać dostęp przez Fiddler Web Debugger.

Dla mnie problem polegał na tym, że błędnie wpisałem znak w jednym z plików PHP w projekcie. Nie zauważyłem tego, dopóki nie sprawdziłem Git pod kątem zmian w projekcie.

W moim przypadku miałem: m<?php runMyProgram(); ?> .

Kiedy wymazałem m, znowu zaczęło działać.

Jeremy Noonan
źródło
puste miejsce przed otwartym tagiem php może spowodować ten sam błąd.
deepcell
1

W moim przypadku stało się to podczas dodawania nowej aplikacji do IIS, która wymagała proxy z Apache.

Musiałem zestawu ProxyHTMLEnable OndoProxyHTMLEnable Off dostać się do zawartości. (Wygląda na to, że większość kodu js spowodowała błąd, ale to dało mi przynajmniej coś do pracy).

IIS wysyła zawartość strony Content-Encoding: gzip

<Proxy "http://192.168.1.1:81">
    ProxyHTMLEnable On   #> change this to Off
    ProxyHTMLURLMap  ...  ...
</Proxy>
MeSo2
źródło
0

Mieliśmy również ten problem podczas aktualizacji naszego systemu do Revive. Po wyłączeniu GZIP okazało się, że problem nadal występuje. Po dalszych badaniach stwierdziliśmy, że uprawnienia do plików po aktualizacji nie są poprawne. Prosty rekurencyjny chmod załatwił sprawę.

Wes
źródło
0

O wiele bardziej powszechną odpowiedzią jest to, że masz jakiś błąd, który jest dołączany do jakiejkolwiek kompresji. Rozwiązaniem jest ustawienie display_errors = Offw pliku php.ini (sprawdź w swoim terminalu, czy jest włączony, uruchamiając php --infoi poszukaj "display_errors")

Że należy to zrobić. Jak odkryjesz, jakie błędy tak naprawdę jesteś? Sprawdź dzienniki błędów PHP za każdym razem, gdy trafisz na tę trasę / stronę.

Powodzenia!

tommymarshall
źródło