Итого, тема затронута интересная, поэкспериментировал, нашел в чем причина, сейчас подробно опишу.
---
Для экспериментов, использовались браузеры Opera и Firefox последних версий.
Для подробного мониторинга всех HTTP запросов и заголовков, использовалась профессиональная программа - сниффер HTTP Analyzer V6.
---
Итак, для начала, была полностью подтверждена бредовость тех заголовков, о которых я писал вначале и которые выпилил из двига.
Но меня заинтересовал тот факт, что теоретически, те заголовки призваны бороться с кэшированием и давать браузеру инструкции по постоянному обновлению информации.
На практике же, получался совсем обратный эффект.
Опера - хуй ложила на все эти инструкции и кэширует, независимо от их наличия. или отсутствия.
Мурзилка Фраерфокс - наоборот, при наличии тех заголовков почему-то начинает кэшировать, а при отсутствии, каждый раз обновляет страницу, генерируя доп. траффик.
----
Начал выяснять подробно.
Для начала, нужно было выяснить, какая именно строка из тех 4-х влияет на кэширование.
Методом исключения, нашел искомую строку:
header("Cache-Control: no-cache, must-revalidate");
влияет именно она, другие хоть есть, хоть их нет, картина не меняется.
Позвольте, удивился я, ведь данная строка дает команду именно НЕ КЭШИРОВАТЬ! Что же тогда творится, почему обратный эффект?
Ответ есть в той статье, ссылку на которую я дал выше и которая очень помогла в моих исследованиях.
Это НЕПРАВИЛЬНАЯь инструкция. потому и ругался валидатор.
Если написать ту же строку, но правильно:
header("Cache-Control: no-store, no-cache, must-revalidate");
тогда инструкция выполняется ПРАВИЛЬНО всеми браузерами, даже Опера начинает обновлять информацию.
---
Да, но мы же хотели наоборот, не обновлять, а кэшировать, чтоб не гонялся лишний траффик и сервер не заваливался лишними запросами.
Для этого есть правильный заголовок:
header("Cache-Control: public");
Все браузеры начинают корректно кэшировать информацию
Можно добавить еще одну строку, где для надежности можно указать время жизни страниц:
header("Cache-Control: public");
header("Expires: " . date("r", time() + 30));
в моем примере, я указал 30 секунд
---
И вот теперь, все правильно и соответствует стандартам RFC
Спасибо камрадам, что затронули этот вопрос, иначе самому все было лень возиться с исследованиями.