У меня есть этот минимальный код, который выводит некоторый текст:
<?php
$output = "";
for ($i = 0; $i < 7000; $i++) {
$output .= ($i % 2) ? "Foo " : "Bar ";
}
header("Content-Length: ".strlen($output));
echo $output;
exit;
Использование Apache 2.2.34 на моем веб-сервере, и я не могу сжать вывод через .htaccess (см. Ниже).
Но если я просто удаляю эту строку header("Content-Length…
, неожиданно выходные данные сжимаются, как ожидается, и отправляются соответствующие заголовки (Content-Encoding: gzip
, Vary: Accept-Encoding
, Transfer-Encoding: chunked
).
My.htaccess использует директивы AddOutputFilterByType
и Filter
*, я пробовал и то и другое независимо:
AddOutputFilterByType DEFLATE "text/html"
<IfModule filter_module>
FilterDeclare COMPRESS
FilterProvider COMPRESS DEFLATE Content-Type $text/html
FilterProvider COMPRESS DEFLATE resp=Content-Type /text/(css|javascript|plain|xml|x-component)/
FilterProvider COMPRESS DEFLATE resp=Content-Type /application/(javascript|json|xml|x-javascript)/
FilterChain COMPRESS
FilterProtocol COMPRESS change=yes;byteranges=no
</IfModule>
У меня нет этой проблемы в моей локальной рабочей среде, где я используюApache 2.4 (к сожалению, я не могу обновить сервер).
РЕДАКТИРОВАТЬ: В моем случае проблема решена, см. Мои комментарии ниже.