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
|