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

У меня есть скрипт 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 -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

3 ответа

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

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

Другие вопросы по тегам