Кэширование или использование CSS?

Line

Google, Co.
Кэширование или использование CSS?

Есть сайт такой -
http://www.nokia.ru/phones/models/

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

Пример:
http://www.nokia.ru/phones/models/
а потом
http://www.nokia.ru/phones/enhancements/
и назад по ссылке.

Как мы видем не видно обращения к серверу вообще.

Есть мысли по этому поводу?
 

AL

Guest
<!-- Copyright (c) Art. Lebedev Studio | http://www.artlebedev.ru/ -->
Беедная Nokia...
 

Line

Google, Co.
Похоже на mod_accel
Если у кого установлен mod_accel - откликнитесь
 

MiRacLe

просто Чудо
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType image/jpeg "modification plus 1 month"
</IfModule>
 

Line

Google, Co.
Куда в httpd.conf вписать?
С учетом того, что я вписал просто в произвольное мето httpd.con не получил никакой рекции. Как было обращение при переходе на уже до этого загруженную страница, так и есть.
 

MiRacLe

просто Чудо
в httpd.conf в произвольное место
или в нужный VirtualHost
или в .htaccess

а судя по тому что должного эффекта ты не добился - модуль "mod_expires" не скомпилен(не подключен)
[проверить включен ли модуль можно в phpinfo - список модулей]


соответственно если он есть(в директории modules[libexec] ) сделай LoadModule если нет - скомпилируй отдельно[mod_so должен быть установлен] (модуль есть в "стандартной поставке apache" /path/to/apache/bin/apxs -cio mod_expires.c) или пересобери целиком apache с ./configure --enable-module=expires
 

Line

Google, Co.
Пересобрас с ./configure --enable-module=expires

mod_php5, mod_setenvif, mod_so, mod_auth, mod_access, mod_alias, mod_userdir, mod_actions, mod_imap, mod_asis, mod_cgi, mod_dir, mod_autoindex, mod_include, mod_status, mod_negotiation, mod_mime, mod_log_config, mod_env, http_core

Но нету его, а почему?
 

MiRacLe

просто Чудо
разберись !
возможно стоит ClearModuleList (значит надо ниже добавить AddModule mod_expires.c или убрать ClearModuleList[разобраться зачем он стоит])

возможно вообще не сделал make install (такое тоже бывает)

телепатить надоело ;o)
 

Line

Google, Co.
Все модуль добавил!!! Он появился.
Тестирую, следущая ситуация, добавил в произвольное место httpd.conf

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType image/jpeg "modification plus 1 month"
ExpiresByType */* "modification plus 1 month"

</IfModule>

если это скрипт php то при обращению первый раз естественно идет запрос, потом обращаюсь по ссылке к тругой странице сервера (к статичной), потом по ссылке обратно - все равно идет обращение к серваку

GET http: //192.168.10.1/test1.php HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://192.168.10.1/
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Host: 192.168.10.1

HTTP/1.1 200 OK
Date: Mon, 21 Nov 2005 16:21:19 GMT
Server: Apache/1.3.34 (Unix) PHP/5.0.5
X-Powered-By: PHP/5.0.5
Connection: close
Content-Type: text/html


GET http: //192.168.10.1/test1.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.0
Accept: */*
Referer: http://192.168.10.1/test1.php
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Host: 192.168.10.1

HTTP/1.1 200 OK
Date: Mon, 21 Nov 2005 16:21:19 GMT
Server: Apache/1.3.34 (Unix) PHP/5.0.5
X-Powered-By: PHP/5.0.5
Connection: close
Content-Type: image/gif


GET http: //192.168.10.1/test1.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.0
Accept: */*
Referer: http://192.168.10.1/test1.php
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Host: 192.168.10.1

HTTP/1.1 200 OK
Date: Mon, 21 Nov 2005 16:21:19 GMT
Server: Apache/1.3.34 (Unix) PHP/5.0.5
X-Powered-By: PHP/5.0.5
Connection: close
Content-Type: image/gif

Пробовал отключать модуль, комментировал его подключение, реультат точно такой же!
 

Steamroller

Новичок
А ты уверен, что для ExpiresByType можно использовать вилдкарды в mime-type? Если явно задать правила для text/html и image/gif - что выдает?
 

Line

Google, Co.
Убрал ExpiresByType */* "modification plus 1 month"
написал ExpiresByType text/html "modification plus 1 month"


такойже результат, короче говоря такое впечатление что модуль вообще не работает, хотя phpinfo возвращает

mod_php5, mod_setenvif, mod_so, mod_expires, mod_auth, mod_access, mod_alias, mod_userdir, mod_actions, mod_imap, mod_asis, mod_cgi, mod_dir, mod_autoindex, mod_include, mod_status, mod_negotiation, mod_mime, mod_log_config, mod_env, http_core

где он есть

-~{}~ 21.11.05 19:32:

Сам файл концигурации httpd.conf
http://www.hostx.ru/httpd.conf
 

Steamroller

Новичок
К этому Апачу юзер-агент напрямую подключается, или между ними еще какая-то прокся? А то заголовок Proxy-Connection: Keep-Alive как-то неествественно смотрится в ответах.
 

Line

Google, Co.
Нет прокси никакой, у меня есть сервер с FreeBSD и к нему напрямую подключается моя рабочая станция
 

Line

Google, Co.
Не вариант установка nginx. Только Apache

-~{}~ 21.11.05 20:59:

Интересное дело, файлы типа html (статические) не перезагружает, т.е. не обращается к серверу, а динамические php обращается и еще, с картинками удается работать с помощью ExpiresByType image/jpeg "access plus 1 year", например уменьшив до access plus 5 sec мы получаем, то что картинка постоянно скачивается с скервера, тем самым не кэшируется, а вот что качается документов то тут непонятно

-~{}~ 21.11.05 21:16:

Както нужно передать


If-Modified-Since: Wed, 12 Oct 2005 15:51:56 GMT
If-None-Match: "1d0b2-2262-434d311c"

А как?????
Средствами Apache или PHP?
 

Steamroller

Новичок
Автор оригинала: Line

Както нужно передать


If-Modified-Since: Wed, 12 Oct 2005 15:51:56 GMT
If-None-Match: "1d0b2-2262-434d311c"

А как?????
Средствами Apache или PHP?
Это заголовки клиента, которые браузер передает, а не заголовки ответа сервера.
 

Line

Google, Co.
Ответ найден!!!

Дело в локальном кэшировании браузером.

2 варианта:
1) Cache-Control: max-age=300000 (в секундах)
2) Введение в использование заголовка Last-Modification: ...

Все ;-)

Вопрос еще, средствами Apache можно указывать Last-Modification для документов типа php?
Как включить данную опцыю в Apache?
 

MiRacLe

просто Чудо
сказать что "никак" боюсь, возможно mod_headers поможет выставить это заголовок .... НО

Но с другой стороны давай подумаем вместе: скрипт news.php "выбирает" новости из базы данных (mysql например) - что отсылать должен apache в качестве Last-Modified ? время изменения файла news.php ? так он не менялся уже 5 лет, а новости в базу попадают каждые полчаса.....

заголовок должен посылать сам скрипт, благо соответствующие функции уже присутсвуют - [m]header[/m], [m]gmdate[/m]
 
Сверху