GZIP caching
Не знал куда можно отнести эту тему, поэтому напишу в оффтопик.
На днях с удивлением для себя обнаружил, что zgip не кэширеются. Т.е. например мы хотим js файлы уменьшить в размере. Возьмем к примеру файл какого-нибудь js framework-а. Переименуем его на framework.php и перед кодом добавим следующие строки
<?php
header("content-type: application/x-javascript");
ob_start("ob_gzhandler");
?>
Затем глянем в firebug размер нашего framework-a, он уменьшится где то 3 раза. Только вот дело в том, что эта штука не кэшируется, потому, при каждом таком запросе, в качестве даты создания файла, показывается текущее время сервера. Поэтому браузер опять загружает файл. Как только не пробовал это исправить, ни в какую. Способ первый (Жесткое кэширование, из статьи Ильи Кантора, и других источников) Пишем вот эти строки в нашем php файле
<?php
header("content-type: application/x-javascript");
header("Expires: ".gmdate("D, d M Y H:i:s", time()+86400*365*12)." GMT");
header("Cache-Control: max-age="+86400*365*12);
ob_start("ob_gzhandler");
?>
Метод не работает, все равно загружается. Способ второй. C помощью 7-zip архивируем framework получаем файл framework.jz.gz И добавляем в файл .htaccess вот эти строки (Возможно надо как то по другому, но перебрал все варианты, которые в встретил, это лишь один из них) Код:
RewriteEngine onВ качестве простого примера, сделал функцию Поместил в файл function.js, дальше 7-zip получил function.js.gz
function hi(text){
console.log(text);
}
И подключил в файле
<html>
<head>
<title>GZIP</title>
<script src='js/function.js.gz'></script>
<script>
hi('hi');
</script>
</head>
<body>
</body>
</html>
Выдает ошибку: illegal character [Прерывать на этой ошибке] ‹PlПM Может кто-нибудь знает как с этим справиться? Пробовал в разных кодировках и utf-8 и windows-1251 результат одинаковый, пробовал по разному архивировать: максимальное, нормальное сжатие. |
Можно использовать mod_gzip для Apache2 или ngx_http_gzip_module для Nginx. Тогда сжатием данных будет заниматься непосредственно сервер (или реверс-прокси), и у Вас всегда будет прозрачная и правильная обработка Last-Modified, If-Modified-Since и прочего.
|
На сервере mod_gzip есть - phpinfo выводит сообщение, что он есть.
Я уже согласен, просто делать gzip файл для тех файлов, которые не будут обновляться, но лишь бы это работало. Но не работает. Почему вот такая строка ставит в тупик браузер. Цитата:
Цитата:
Выдает ошибку "illegal character [Прерывать на этой ошибке] ‹PlПM" Может у меня 7-zip не правильный, я уж не знаю что и думать. |
Странно, вроде, должно работать.
Посмотрите на всякий случай файрбагом/драгонфлаем/инспектором, приходит ли браузеру в ответ заголовок Content-Encoding. |
Мне хостер сказал для всех известных расширений,
нельзя ничего у них на сервере применить в файле .htaccess. Думаю сделать так function.js.mygz а дальше по шаблону, может сработает. |
Радикально. А что за хостер, если не секрет?
|
Укажу в личке.
А то не хочется делать негативную рекламу. |
Не выходит никак.
Пожалуйста попробуйте у себя на сервере зипануть вот этот код
function hi(text){
console.log(text);
}
И настроить так, чтобы всё работало как написано выше и дайте пожалуйста линк. Если конечно нетрудно. |
mycoding,
http://immelman.ru/test/gz/index.html Выложил .htaccess и .gzip. Всё работает без проблем. |
subzey,
ОГРОМНЕЙШЕЕ СПАСИБО, я не понимал азов. Заместо <script src='js/function.js'></script> Писал <script src='js/function.js.gz'></script> Я не понимал, что делает .htaccess У меня на сервере тоже все заработало. |
| Часовой пояс GMT +3, время: 11:23. |