У меня есть несколько файлов CSS и JS, которые динамически генерируются PHP с использованием этого в моем .htaccess:
AddHandler application/x-httpd-php .css .js
А затем внутри файлов, например:
<?PHP if ($Browser == 'msie') { ?>
.bind('selectstart', function(event) { [...] })
<?PHP } ?>
В верхней части их (первая строка) я использую условное получение, основанное на заголовке Last-Modified, например:
<?PHP if (FileIsCached(getlastmod())) die(); ?>
Это функция:
public static function FileIsCached($Timestamp)
{
$LastModified = substr(date('r', $Timestamp), 0, -5).'GMT';
$IfModifiedSince = (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
if (($Semicolon = strrpos($IfModifiedSince, ';')) !== false)
$IfModifiedSince = substr($IfModifiedSince, 0, $Semicolon);
header('Last-Modified: '.$LastModified);
if (!$IfModifiedSince || ($IfModifiedSince != $LastModified))
return false;
header('HTTP/1.1 304 Not Modified');
return true;
}
Я не знаюНе нужно проверять кодировку, потому что я использую автоматическое gzip внутри моего php.ini:
output_handler = ob_gzhandler
Я обычно помещаю их в свой index.php так:
<script type="<?PHP echo $JavascriptMIME; ?>" src="/script.js"></script>
Все работает какОчарование ... это мой первый заголовок ответа на загрузку:
HTTP/1.1 200 OK
Date: Fri, 16 Sep 2011 21:21:51 GMT
Last-Modified: Fri, 16 Sep 2011 19:25:37 GMT
Content-Encoding: gzip
Vary: Accept-Encoding
Cache-Control: max-age=31536000, public
Expires: Sat, 15 Sep 2012 21:21:51 GMT
Content-Type: application/javascript
Content-Length: 6161
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Это мой кешированный заголовок ответа:
HTTP/1.1 304 Not Modified
Date: Fri, 16 Sep 2011 21:24:39 GMT
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
Expires: Sat, 15 Sep 2012 21:24:39 GMT
Cache-Control: max-age=31536000, public
Vary: Accept-Encoding
Проблема в том, что иногда данные HTTP, похоже, портятся,может быть, с помощью gzip-контента или чего-то подобного.Сетевая консоль Chrome иногда показывает следующую ошибку: «Ресурс интерпретируется как« Другой », но передается с неопределенным типом MIME».Mozilla иногда делает 2 запроса на index.php или пытается загрузить его с подсказкой загрузки.Иногда файловые запросы останавливаются на 5, когда я обычно загружаю 7 файлов, а содержимое последнего загруженного файла портится как:
���������ÿÿ���������HTTP/1.1 200 OK
Date: Fri, 16 Sep 2011 19:53:26 GMT
Server: Apache/2.2.17 (Win32) PHP/5.3.6
X-Powered-By: PHP/5.3.6
Cache-Control: must-revalidate, no-cache, no-store, private, public
Cache-Control: max-age=0, max-stale=0, post-check=0, pre-check=0
Expires: Wed, 11 Apr 1984 18:36:00 GMT
Expires: 0
Last-Modified: Fri, 16 Sep 2011 19:53:26 GMT
Pragma: no-cache
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Type: application/javascript
Content-Length: 674
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
....
Что это может быть?