ПРОЕКТЫ 


  АРХИВ 


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: feature request: expires never



On 23.09.2006 16:51, Igor Sysoev wrote:
>>
>> Хочется в ngx_http_headers_module иметь допустимым синтаксис:
>>
>> expires never;
> 
> Добавить не сложно. А смысл использования ?

1) приятнее выглядит, чем скажем:

expires 10y;

2) убраны ненужны вычисления.

> "userid_expires max" позволяет просто копирвоать строку
> "Thu, 31-Dec-37 23:55:55 GMT". А что даст - "expires max" ?
> Дату для Expires можно так же копировать, но всё равно
> придёться считать секунды для "Cache-Control".

Просто выдать фиксированное число секунд = 2^31

"expires never" удобно использовать, где версия контента "зашита" в имя
файла:

/banners/120x40_1.2.gif         # 1.2 == $Revision$
/images/today,198748234.jpg     # 198748234 == mtime

т.о. контент не нуждается в валидации - нагрузка падает на кэши,
вебсервер отдыхает.

Следующий логичный шаг - написание модуля выдачи данных в стиле "asis",
т.е. для каждого файла вида:
/banners/120x40_1.2.gif

генерируется файл *.raw (расширение условное):
/banners/120x40_1.2.gif.raw

который содержит неизменяемые заголовки и собственно содержимое файла:

<body>
Content-Type: image/gif
Content-Length: 6396
Last-Modified: Mon, 04 Sep 2006 00:44:34 GMT
Expires: Thu, 31-Dec-37 23:55:55 GMT
Cache-Control: max-age=2147483648

...data...
</body>

Т.е. сначала nginx формирует стандартные заголовки, зависящие от
текущего соединения:

HTTP/1.1 200 OK
Date: Sat, 23 Sep 2006 14:56:31 GMT
Connection: keep-alive

а остаток - быстро отдаётся через sendfile(2) из *.raw

Экономия времени может показаться несущественной (хотя она есть и такты
стоят денег :), но этот же подход позволяет загодя формировать заголовки
ETag, Content-MD5 - в обычных условиях слишком тяжёлые для
online-вычисления.

Собственно говоря, "asis" подход не привязан к случаю "expires never" -
надо лишь дополнительно вычислять "Expires" и "Cache-Control".

Формирование *.raw файлов банально делается на любом языке
программирования, и столь же просто интегрируется в любую CMS.

-- 
Sergey Skvortsov
mailto: skv@xxxxxxxxx




 




Copyright © Lexa Software, 1996-2009.