Я недавно начал использовать gzip на своем сайте, и это работало как чудо во всех браузерах, кроме Opera, которая выдает ошибку о том, что не может распаковать содержимое из-за поврежденных данных. Из того, что я могу почерпнуть из тестирования и поиска в Google, может возникнуть проблема с использованием как gzip, так и chunked Transfer Encoding. Тот факт, что при запросе небольших файлов, таких как css-файлы, ошибок нет, также указывает на это.
Это известная проблема или есть еще что-то, о чем я не думал?
Кто-то также упомянул, что это может быть связано с отправкой заголовка Content-Length.
Вот упрощенная версия наиболее релевантной части моего кода:
$contents = ob_get_contents();
ob_end_clean();
header('Content-Encoding: '.$encoding);
print("\x1f\x8b\x08\x00\x00\x00\x00\x00");
$size = strlen($contents);
$contents = gzcompress($contents, 9);
$contents = substr($contents, 0, $size);
print($contents);
exit();