Как отключить сжатие gzip в Openshift (для конкретных запросов)? Более конкретно: для загрузки файлов, обслуживаемых php — т.е. fpassthrough
,
Я попробовал несколько вещей:
ini_set('zlib.output_compression', 'Off');
в php файлеapache_setenv('no-gzip', '1');
а также apache_setenv('dont-vary', '1');
в php файлеSetEnv no-gzip dont-vary
в файле .htaccessВсе еще простой тест с помощью curl -v -H 'Accept-Encoding: gzip,deflate' http://downloadtest-***.rhcloud.com
дает:
> GET http://downloadtest-***.rhcloud.com/ HTTP/1.1
> User-Agent: curl/7.41.0
> Host: downloadtest-***.rhcloud.com
> Accept: */*
> Proxy-Connection: Keep-Alive
> Accept-Encoding: gzip,deflate
>
< HTTP/1.1 200 OK
< Date: Fri, 22 May 2015 12:47:41 GMT
< Server: Apache/2.2.15 (Red Hat)
< Content-Disposition: attachment; filename="myfile.tmp"< Content-Lenght: 54
< Content-Type: application/octet-stream
< Vary: Accept-Encoding
< Content-Length: 77
< Proxy-Connection: Keep-Alive
< Connection: Keep-Alive
< Content-Encoding: gzip
Фон: Мне нужно отключить сжатие gzip, поскольку оно повреждает уже сжатые файлы — см., Например, https://magento.stackexchange.com/questions/3528/downloadable-zip-files-are-corrupt или же http://www.heath-whyte.info/david/computers/corrupted-zip-file-downloads-with-php.
Полный код теста:
index.php:
$file = __DIR__ . '/test.txt.gz'; //This file is acutally 54 bytes
ini_set('zlib.output_compression', 'Off');
apache_setenv('no-gzip', '1');
apache_setenv('dont-vary', '1');
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="myfile.tmp"');
header('Content-Lenght: '.filesize($file));
if(!file_exists($file)) {
echo "file does not exist!\n";
exit(0);
}
$handle = fopen($file, 'rb');
fpassthru($handle);
fclose($handle);
exit(0);
.Htaccess:
RewriteEngine On
SetEnv no-gzip dont-vary
Сжатие выполняется OpenShift прокси, поэтому конфигурация вашего сервера не влияет на него. Я не нашел способа отключить сжатие. Например, я пытался использовать Cache-Control: no-transform
заголовок ответа, и это не работал.
Других решений пока нет …