PHP удаляют HTTP-заголовок

Что-то, я думаю 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).

9
задан Bart van Heukelom 21 December 2009 в 00:35
поделиться

7 ответов

Сначала я бы проверил, действительно ли это не один из сценариев 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>';
}

Это печатает что-то «пригодное для использования» на вашем сервере?

2
ответ дан 4 December 2019 в 19:34
поделиться

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

0
ответ дан 4 December 2019 в 19:34
поделиться

Я не пробовал, но вы возможно, такие страницы могут быть сохранены в виде файлов .html с вашими пользовательскими заголовками или без них, а сценарий может выполняться внутри

-1
ответ дан 4 December 2019 в 19:34
поделиться

Для этих конкретных файлов можно добавить вызовы header(), которые устанавливают эти заголовки по-другому, т.е. header("Истечение: " . $currentDatePlus10);

header("Cache-Control: max-age=3600, must-revalidate")
7
ответ дан 4 December 2019 в 19:34
поделиться

Вы можете вручную предоставлять HTTP-заголовки от PHP с помощью функции header() .

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

.
2
ответ дан 4 December 2019 в 19:34
поделиться
header("Expires: Fri, 1 Jan 2038 05:00:00 GMT");

или какое-нибудь не менее абсурдное время в далеком будущем. Не забудьте установить значения заголовков перед отправкой любого вывода, если только вы не делаете буферизацию вывода для всей страницы.

http://php.net/manual/en/function.header.php

1
ответ дан 4 December 2019 в 19:34
поделиться

подавить кэш можно следующим образом: 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

0
ответ дан 4 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: