Назад | Перейти на главную страницу

Кэширование 302 редиректа в Chrome

У меня есть скрипт php, который используется для поворота изображений баннеров на сайте.

При обновлении страницы Firefox / IE будет сделан еще один запрос, и будет возвращено другое изображение.

В Chrome запрос кажется кешированным, и только открытие страницы в новой вкладке приведет к тому, что он действительно запросит скрипт.

Я считаю, что это работало в более старых версиях Chrome, я пробовал несколько разных типов кодов перенаправления с тем же результатом.

Какие-нибудь советы?

<img class="banner" src="/inc/banner.php" alt="">

~$ cat /var/www/inc/banner.php 
<?php

header("HTTP/1.1 302 Redirect");
header("Cache-Control: max-age=0, no-cache, no-store, must-revalidate");

//header('HTTP/1.1 307 Temporary Redirect');
//header("expires: none");
//header("expires: max");
//header("Cache-Control: public");

$folder = '../img/banner/';

$exts = 'jpg jpeg png gif';

$files = array(); $i = -1;
if ('' == $folder) $folder = './';

$handle = opendir($folder);
$exts = explode(' ', $exts);
while (false !== ($file = readdir($handle))) {
foreach($exts as $ext) { // for each extension check the extension
if (preg_match('/\.'.$ext.'$/i', $file, $test)) { // faster than ereg, case insensitive
$files[] = $file; // it's good
++$i;
}
}
}
closedir($handle); // We're not using it anymore
mt_srand((double)microtime()*1000000); // seed for PHP < 4.2
$rand = mt_rand(0, $i); // $i was incremented as we went along

header('Location: '.$folder.$files[$rand]); 
flush();
?>

curl output;

~$ curl -I -k https://example.net/inc/banner.php
HTTP/1.1 302 Redirect
Server: nginx/1.1.14
Date: Fri, 24 Feb 2012 03:23:46 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.3.10-1ubuntu1
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Location: ../img/banner/2.jpg

На моей домашней странице у меня было имя файла верхнего фрейма: banner.php он не отображался в Google Chrome, работал нормально во всех других браузерах ... Я часами искал ошибки в коде, затем я изменил имя файла и ссылка из набора фреймов на mybanner.php, и это также работало в Google Chrome!

По W3C (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3) "Этот ответ кэшируется только в том случае, если он указан полем заголовка Cache-Control или Expires.". Попробуйте использовать 301" Перемещено навсегда ".