Войти
ПрограммированиеФорумВеб

Как заставить браузер брать только из кеша PHP-страницу со статичным контентом?[решено]

Страницы: 1 2 Следующая »
#0
0:36, 8 июля 2015

Всем привет.
Ситуация такова.
Попиливаю себе MMOG на PHP. Клиент - *.php-файл со статичным контентом.
Т.е. план таков: браузер загружает клиент по GET с параметром, JS в клиенте после оnReady - посылает параметр серверу, в обратку получает немного параметров игрока.

Я хочу, чтобы мой клиент качался с сайта только в первый раз, а после лишь брался из кеша.
Как такое сделать?

Пробовал разные заголовки добавлять вроде:

header ("Last-Modified: Tue, 07 Jul 2015 19:41:13 GMT");
header('Etag: "LOHClient 23:55 07.07.2015"');
header("Accept-Ranges: bytes");
header("Content-Length: 16788");

Толку мало. Работает только "Last-Modified", и то только минут на 5, а потом опять браузер обращается к сайту.

Ещё вот заметил, что к моему клиенту, если подождать минут 10) браузер обращается через "200 OK", а к статичной HTML-странице "304 Not Modified". Но как это использовать - никак не могу понять.


#1
1:33, 8 июля 2015

Epsilon
> Я хочу, чтобы мой клиент качался с сайта только в первый раз, а после лишь
> брался из кеша.
> Как такое сделать?
первый вопрос, каков магический смысл в отдаче страницы именно PHP скриптом, может можно как то обойтись простой html страницей?
во вторых, на сколько я знаю, браузеры очень не охотно кешируют вещи урлы к которым содержат параметры
в третьих попробуй выставлять Expires

#2
1:36, 8 июля 2015

Epsilon
ну как бы да, освежил память
для правильного кеширования нужно выставлять
(expires или сache-сontrol max-age)
и
(last-modified или etag)

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

а вот и полезное чтиво https://developers.google.com/speed/docs/insights/LeverageBrowserCaching

#3
1:53, 8 июля 2015

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

#4
1:55, 8 июля 2015
Фак, инет вырубился в неподходящий момент, не успел подправить 0-пост.

Короче проблемка решена: внезапно гуглилось решение http://habrahabr.ru/sandbox/75204/

#5
2:00, 8 июля 2015

cNoNim
> первый вопрос, каков магический смысл в отдаче страницы именно PHP скриптом,
> может можно как то обойтись простой html страницей?
А HTML позволяет передавать ему в строке адреса параметры?

cNoNim
> в третьих попробуй выставлять Expires
Пробовал - не помогло.

cNoNim
> Epsilon
> ну как бы да, освежил память
> для правильного кеширования нужно выставлять
> (expires или сache-сontrol max-age)
> и
> (last-modified или etag)
Тоже не помогает.

cNoNim
> и еще полезно смотреть, какие заголовки выставляются для простой html страницы
> веб сервером
> ну и потом уже думать, что выставлять ручками
Тоже делал.

cNoNim
> лучше параметры убирать из урлов и переносить в имена файлов или в путь к файлу
У меня бесплатный сервак - там перенести в имена файлов - никак.

cNoNim
Ну, ты хотя бы попытался помочь, и на том спасибо.

#6
2:01, 8 июля 2015

Epsilon
какая то фигня тебе нагуглилась честно говоря
смысл кеширования в том что браузер в принципе не шлет запрос на сервер,
а не что бы на сервере проверить время изменения файла и отдать 304

#7
2:03, 8 июля 2015

Epsilon
> А HTML позволяет передавать ему в строке адреса параметры?
я не много не понимаю суть идеи )
у тебя от парамера в содержимом странице чего меняется?
если ни чего. то параметр можно к чему угодно передать,
другой вопрос как получить в javascript значение из параметра, ну тут как говорится все тоже давно придумано за нас

http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript

#8
2:05, 8 июля 2015

Epsilon
> Короче проблемка решена: внезапно гуглилось решение
> http://habrahabr.ru/sandbox/75204/
воть
http://stackoverflow.com/questions/6405611/can-browser-display-ob… 4-status-code

#9
2:09, 8 июля 2015

cNoNim
> а вот и полезное чтиво
> https://developers.google.com/speed/docs/insights/LeverageBrowserCaching
Нечто подобное уже читал и пробовал, щас перепроверю сделать что написано в статье (для верности).

#10
2:12, 8 июля 2015

Epsilon
и еще, ты ведь вкурсе, что вроде бы во всех браузерах есть возможность отключить кэш, когда открыта панель инструментов,
может у тебя как раз эта опция все портит?

#11
2:35, 8 июля 2015

cNoNim
> http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
Чёто непонал в чём там суть. Просто функция на JS как распарсить адрес?

cNoNim
> http://stackoverflow.com/questions/6405611/can-browser-display-ob…
> 4-status-code
Попробовал это:
header('HTTP/1.1 304 Not Modified');
header("Expires: Mon, 31 Dec 2035 12:00:00 gmt");
header("Cache-Control: max-age=".(60*60*24*365));
...не помогло.

#12
2:41, 8 июля 2015

cNoNim
> Epsilon
> и еще, ты ведь вкурсе, что вроде бы во всех браузерах есть возможность
> отключить кэш, когда открыта панель инструментов,
> может у тебя как раз эта опция все портит?
В курсе. У меня кеш точно работает, по крайней мере для одного JS-файла.

#13
2:44, 8 июля 2015

Как я проверяю кешируемость php-страницы:

<?php
Sleep(10);
print "content";
?>

#14
7:38, 8 июля 2015

Epsilon
> ...не помогло.
Нельзя ставить expires больше года

Страницы: 1 2 Следующая »
ПрограммированиеФорумВеб

Тема в архиве.