Заголовок PHP - Переадресация местоположения, кажется, теряет кэширование - PullRequest
1 голос
/ 12 июля 2011

Я выполняю некоторые проверки cURL кодов ответов файлов перед перенаправлением запросов на разные хосты (чтобы убедиться, что файлы существуют до того, как я перенаправлю).

Когда мы все счастливы, я отправляю их вне сервера на удаленный хост, и мы все счастливы.

Кажется, единственная проблема - это не кеширование на компьютере пользователя. Что я могу сделать, чтобы браузер пользователя знал, что это тот же файл? Я думал, что это будет по сути знать, так как это просто перенаправление местоположения заголовка (т.е. header ('location: http://www.locationtogo.com/asda?242');

)

Спасибо за любую помощь!

------- ОБНОВЛЕНИЕ ----------

Кажется, довольно много вопросов по этому поводу; поэтому позвольте мне объяснить шаг за шагом ...

  1. Пользователь запрашивает файл из handler.php
  2. handler.php проверяет cURL, имеет ли код ответа
  3. если код ответа 200, я перенаправлял в файл
  4. однако каждый раз, когда перезагружается файл handler.php для того же файла ... он перезагружает весь файл

Я сейчас понял - глупая ошибка - но здесь приведу только случай, если кто-нибудь испытает то же самое - я, конечно, искал ответ 200, а не 200 или 304.

Это сейчас кеширование.

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

Вам необходимо добавить заголовок Cache-Control или Expires вместе с перенаправлением, чтобы указать, что его можно кэшировать.

Пример (это позволит браузеру кэшировать ответ в течение часа)

header('Cache-Control: max-age=3600')
0 голосов
/ 12 июля 2011

PHP и apache не будут кэшировать файл PHP по умолчанию. Я недавно столкнулся с этим сам. Однако вы можете вернуть 304, если хотите, и это решит проблему. Я сделал это с помощью etags.

Просто отправьте браузеру первый раз хэш etag при первом посещении.

header('Etag: '.$eTagHash);

Затем проверьте, есть ли etag, если это так, скажите браузеру, что 304 не изменен.

if(isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
    if(trim($_SERVER['HTTP_IF_NONE_MATCH']) == trim($eTagHash)){
       header("HTTP/1.1 304 Not Modified");
       exit;
    }}

Вы можете установить $ eTagHash на что угодно. Вы должны включить etags на сервере apache (большинство так и делает).

Если вам когда-нибудь понадобится перенаправить куда-то еще, просто измените хэш etag, и, если он не совпадает, вы можете снова отправить браузеру etag заголовка с новым значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...