Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Кеширование php-файлов браузером

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
mk.vizet
Отправлено: 13 Апреля, 2016 - 00:51:16
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Март 2015  


Помог: 0 раз(а)




Доброго времени суток, уважаемые форумчане

Каким образом можно заставить браузеры кешировать php-файлы, как физически существующие, так и запрашиваемые через редиректы?
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Апреля, 2016 - 01:55:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Браузер получает результат работы этих php-файлов, а точнее - php-кода в них.
Кешировать результат на стороне клиента (браузера) можно так же, как и статических ресурсов (типа картинок, стилей и т.д.) манипулируя заголовками ETag или Last-Modified используя пришедшие заголовки If-Modified-Since (дата) или If-None-Match (хеш).

Примерная логика с одним только хешем:
1. Добавить поле в таблицу для данной страницы какой-нибудь уникальный хеш.
2. Всегда отправлять заголовок ETag со значением того уникального хеша.
3. При модификации данных обновлять хеш.
4. Проверяем, есть ли со стороны клиета заголовок "If-None-Match" (это тот хеш).
Если пришедший хеш не отличается от текущего, то отправляете заголовок со статусом 304 без тела запроса, иначе со статусом 200 и сами данные.

Примерная логика с датой последней модификации, без записи хеша в базу:
1. п.4 с первого примера.
2. Если нет хеша, то генерируем и отсылаем в заголовках. Так же добавляем заголовок "Last-Modified".
Если же хеш есть, то сверяем значение заголовка "If-Modified-Since" с датой последней модификации данных:
если соответствует, то отвечаем одним статусом 304 и с тем же хешем, который пришёл, иначе целиком и с новым хешем.

Как-то так.

(Отредактировано автором: 13 Апреля, 2016 - 03:18:07)

 
 Top
mk.vizet
Отправлено: 13 Апреля, 2016 - 02:01:59
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Март 2015  


Помог: 0 раз(а)




т.е. организовать процесс общения браузера с сервером о кешировании этих файлов вручную?
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Апреля, 2016 - 02:03:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




А как иначе? Данные же динамические?
Это же не статичные html файлы.

mk.vizet пишет:
о кешировании этих файлов вручную?

Точно файлы (а точнее данные в них) статичны ?
Т.е. там прямо статичный текст, без единого php-кода ?
Если да, то отдавайте как есть, без всяких там реврайтов. Сервер сам разрулит.
Возможно надо будет изменить (не уверен: надо смотреть заголовки) расширения на .html, .txt или какой там ещё тип данных внутри.
Да и логично будет, если расширение, будет соответствовать типу содержимого.

Если же данные формируются динамически, то соответствующие заголовки надо тоже формировать вручную.
Вы же отправляете, например заголовок:
Content-Type: text/html; charset=utf-8
А если страница перемещена или только для авторизованных пользователей, то и соответствующий статус ответа 302/403
(Добавление)
Выше добавил ещё вариант.

(Отредактировано автором: 13 Апреля, 2016 - 05:32:53)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Apache и другие веб-серверы »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB