ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Вопрос по If-Modified-Since



Alex Vorona wrote:
04.02.2009 18:09, Роман Маширов wrote:
Временно решил проблему прописав add_header Last-Modified 'Thu, 22 Jan 2009 10:49:49 GMT';
сорри за настойчивость, но способа отключить проверку if-modified-since для location таки нету?

Роман Маширов wrote:
Добрый день!

Вопрос в большей степени теоретический, но все же. Можно ли запретить проверку if-modified-since для location?
Есть location, при запросе на него выдается x-accel-redirect на случайный файл на диске. Если броузер отправляет If-Modified-Since nginx проверяет дату модификации файла на который выдали x-accel-redirect. Теоретически никто не запрещает файлам на диске иметь одинаковое время модификации. В итоге будет выдан 304 not modified, хотя файл не тот, который выдавали в прошлый раз.

-- 
MRJ

а хочется отдавать 200 каждый раз при любом запросе?

Да. Что происходит в примерах:

expires -1;

первый запрос (кэш бровзера пустой):
GET /ibb/1444_289 HTTP/1.1
Host: test.client2.nandy.ru:8080
User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.12) Gecko/20080213 Firefox/2.0.0.12
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
 
HTTP/1.x 200 OK
Server: nginx/0.6.31
Date: Wed, 04 Feb 2009 18:24:43 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 529
Last-Modified: Wed, 04 Feb 2009 18:03:22 GMT
Connection: keep-alive
Expires: Wed, 04 Feb 2009 18:24:42 GMT
Cache-Control: no-cache
Accept-Ranges: bytes

повторный запрос:
GET /ibb/1444_289 HTTP/1.1
Host: test.client2.nandy.ru:8080
User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.12) Gecko/20080213 Firefox/2.0.0.12
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Wed, 04 Feb 2009 18:03:22 GMT
 
HTTP/1.x 304 Not Modified
Server: nginx/0.6.31
Date: Wed, 04 Feb 2009 18:26:36 GMT
Last-Modified: Wed, 04 Feb 2009 18:03:22 GMT
Connection: keep-alive
Expires: Wed, 04 Feb 2009 18:26:35 GMT
Cache-Control: no-cache

При этом x-accel-redirect был отдан на другой файл, просто у этого файла ровно такое же время модификации.


expires 0;

первый запрос (кэш очищен):
GET /ibb/1444_289 HTTP/1.1
Host: test.client2.nandy.ru:8080
User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.12) Gecko/20080213 Firefox/2.0.0.12
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
 
HTTP/1.x 200 OK
Server: nginx/0.6.31
Date: Wed, 04 Feb 2009 18:30:50 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 529
Last-Modified: Wed, 04 Feb 2009 18:03:22 GMT
Connection: keep-alive
Expires: Wed, 04 Feb 2009 18:30:50 GMT
Cache-Control: max-age=0

Accept-Ranges: bytes

Повторный запрос:
GET /ibb/1444_289 HTTP/1.1
Host: test.client2.nandy.ru:8080
User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.12) Gecko/20080213 Firefox/2.0.0.12
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Wed, 04 Feb 2009 18:03:22 GMT
 
HTTP/1.x 304 Not Modified
Server: nginx/0.6.31
Date: Wed, 04 Feb 2009 18:32:52 GMT
Last-Modified: Wed, 04 Feb 2009 18:03:22 GMT
Connection: keep-alive
Expires: Wed, 04 Feb 2009 18:32:52 GMT
Cache-Control: max-age=0

И опять-таки x-accel-redirect отдавался на разные файлы с одинаковым временем одификации.

Логика бровзера понятна: кешировать запрещено, но это не значит что не следует переспросить сервер, а вдруг файл не изменился?

Логика nginx тоже не вызывает сомнений если x-accel-redirect всегда отображает один и тот же урл в один и тот же файл. Тогда проверка по времени модификации файла дает правильный результат.

Проблема возникает только если по одному урлу может быть выдан редирект на разные файлы.

Соответственно пока мое решение
expires -1;
add_header Last-Modified 'Thu, 22 Jan 2009 10:49:49 GMT';

Первый запрос:
GET /ibb/1444_289 HTTP/1.1
Host: test.client2.nandy.ru:8080
User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.12) Gecko/20080213 Firefox/2.0.0.12
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
 
HTTP/1.x 200 OK
Server: nginx/0.6.31
Date: Wed, 04 Feb 2009 18:40:37 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 529
Connection: keep-alive
Expires: Wed, 04 Feb 2009 18:40:36 GMT
Cache-Control: no-cache
Last-Modified: Thu, 22 Jan 2009 10:49:49 GMT
Accept-Ranges: bytes

Повторный запрос:
GET /ibb/1444_289 HTTP/1.1
Host: test.client2.nandy.ru:8080
User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.12) Gecko/20080213 Firefox/2.0.0.12
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Thu, 22 Jan 2009 10:49:49 GMT
Cache-Control: max-age=0
 
HTTP/1.x 200 OK
Server: nginx/0.6.31
Date: Wed, 04 Feb 2009 18:42:34 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 529
Connection: keep-alive
Expires: Wed, 04 Feb 2009 18:42:33 GMT
Cache-Control: no-cache
Last-Modified: Thu, 22 Jan 2009 10:49:49 GMT
Accept-Ranges: bytes

Т.е. поставить last-modified в прошлое относительно даты модификации файлов. Тогда броузер переспрашивает в if-modified это старое значение, оно не совпадает со значением файла на диске и ура.
Иеальным решением было бы отключить проверку if-modified-since...

--
MRJ


 




Copyright © Lexa Software, 1996-2009.