Что-то, я думаю Apache, добавляют эти HTTP-заголовки ко всем ответам, сгенерированным Сценариями PHP:
Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Это работает хорошо на фактические динамические страницы, но у меня есть некоторая страница, которые, в то время как сгенерировано PHP, главным образом статичны, и я хочу, чтобы браузер кэшировал их.
Существует ли путь в PHP, чтобы удалить те заголовки из ответа и таким образом активировать кэширующиеся правила браузера по умолчанию, или в противном случае там какое-либо значение, к которому я могу установить их, это эквивалентно с ними являющийся отсутствующим?
Я предпочел бы не устанавливать свои собственные значения, потому что я хочу, чтобы браузер использовал те же правила кэширования что касается статических ресурсов, которые подаются самим Apache (не используя mod_cache).
Сначала я бы проверил, действительно ли это не один из сценариев php, который устанавливает эти заголовки.
register_shutdown_function('foo');
echo "test";
function foo() {
flush();
$c = "headers_list: \n " . join("\n ", headers_list());
if ( function_exists('apache_response_headers') ) {
$c .= "\napache_response_headers:";
foreach( apache_response_headers() as $k=>$v) {
$c.= "\n $k=$v";
}
}
$c .= "\n\n";
echo '<pre>', $c, '</pre>';
}
Это печатает что-то «пригодное для использования» на вашем сервере?
There is likely somewhere in your code that has set these variables, as I can't find where they are inserted automatically by PHP anywhere, nor are they in any of my LAMP installations.
The only automatically generated header for my installs is X-Powered-By
with the PHP version.
As you've said, from the docs they recommend saying header("Expires:");
to replace the old header, but header("Cache-control:");
just became Cache-Control: max-age=0
in my browser (so this is not what you're trying to do).
I'd recommend checking if these values come from a framework or setting you've changed, but it may be different across different versions of PHP / platforms you'd be running PHP on.
I'd check for ExpiresByType
or ExpiresDefault
directives in global configs, vhosts, pr .htaccess files or any blocks encapsulated in
or
"I want the browser to use the same caching rules as for static resources that are served by Apache itself (without using mod_cache)."
Try looking at a static resource and then matching the rules then. You can calculate the Expires offest with this -> http://www.php.net/manual/en/function.header.php#93377
Я не пробовал, но вы возможно, такие страницы могут быть сохранены в виде файлов .html с вашими пользовательскими заголовками или без них, а сценарий может выполняться внутри
Для этих конкретных файлов можно добавить вызовы header(), которые устанавливают эти заголовки по-другому, т.е. header("Истечение: " . $currentDatePlus10);
header("Cache-Control: max-age=3600, must-revalidate")
Вы можете вручную предоставлять HTTP-заголовки от PHP с помощью функции header()
.
Я полагаю, что это должно отключить значения заголовков веб-сервера по умолчанию.
.header("Expires: Fri, 1 Jan 2038 05:00:00 GMT");
или какое-нибудь не менее абсурдное время в далеком будущем. Не забудьте установить значения заголовков перед отправкой любого вывода, если только вы не делаете буферизацию вывода для всей страницы.
подавить кэш можно следующим образом: PHP Code:
header ( "Cache-Control: no-cache, must-revalidate"); / / HTTP/1.1
header ( "Expires: Mon, 1 Jul 1990 05:00:00 GMT"); / / Date in the past
если вы хотите автоматически сгенерировать его, то это можно сделать здесь: PHP: session_cache_limiter()
- Manual they