Назад | Перейти на главную страницу

Какие заголовки добавить для наиболее эффективного кеширования файлов?

Итак, у меня есть этот заголовок ответа для статических файлов на моем сервере nginx.

Cache-Control:max-age=2592000
Connection:keep-alive
Date:Sat, 11 Dec 2010 22:28:13 GMT
Expires:Mon, 10 Jan 2011 22:28:13 GMT
Last-Modified:Sat, 11 Dec 2010 22:11:35 GMT
Server:nginx/0.6.32

Думаю убрать подпись сервера, чтобы уменьшить размер ответа. Что я должен добавить в конфигурацию моего сервера, чтобы браузер мог использовать файлы, даже не запрашивая их, и в целом сделать его максимально эффективным? В настоящее время я могу получить js на сервере так быстро: http://i55.tinypic.com/orrons.png

Редактировать: Я знаю, что добавил это свойство: add_header cache-control public; А заголовки ответа такие:

Cache-Control: max-age=31536000
Cache-Control: public

Потому что у меня истекает 1 год; установить тоже. Есть ли возможность присоединиться к ним?

Также я проверил ответы файла javascript facebook, и они используют следующие методы:

HTTP/1.1 200 OK
Content-Type: application/x-javascript; charset=utf-8
Last-Modified: Sat, 01 Jan 2000 00:00:00 GMT
Pragma:
Content-Encoding: gzip
X-Cnection: close
Content-Length: 11724
Vary: Accept-Encoding
Cache-Control: public, max-age=31239788
Expires: Thu, 08 Dec 2011 23:43:19 GMT
Date: Sun, 12 Dec 2010 10:00:11 GMT
Connection: keep-alive

Что делала собственность Vary? Думаю, я буду применять последние модификации много лет назад, как и они.

Silviud говорит о заголовке, который отправляется клиентом как часть запроса на сервер, чтобы сервер знал, отправлять ли 304 Not Modified или все содержимое файла / страницы в качестве ответа.

Хотя удаление заголовка Server не повредит, но и пользы от этого не будет, за исключением крошечных (например, Not Modified) ответов. Вы можете рассмотреть возможность добавления слова «public» в заголовок Cache-control, чтобы явно указать, что общие кеши могут кэшировать содержимое.

Поле заголовка запроса If-Modified-Since используется с методом, чтобы сделать его условным: если запрошенный вариант не был изменен с момента времени, указанного в этом поле, объект не будет возвращен с сервера; вместо этого будет возвращен ответ 304 (не измененный) без тела сообщения.

   If-Modified-Since = "If-Modified-Since" ":" HTTP-date

Пример поля:

   If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

Метод GET с заголовком If-Modified-Since и без заголовка Range запрашивает передачу идентифицированного объекта только в том случае, если он был изменен с даты, указанной в заголовке If-Modified-Since. Алгоритм определения этого включает следующие случаи:

у вас уже есть максимальный возраст, поэтому он также будет применяться

вы хотите кэшировать, а также получить условный GET, чтобы клиент не отправлял ответ

Это не связано с кешированием, но поскольку вы сравниваете свои заголовки с заголовками facebook, я предполагаю, что ваша забота - улучшить пользовательский интерфейс вашего сайта.

Я вижу, что в вашем заголовке не хватает сжатия. nginx и другие веб-серверы позволяют сжимать контент перед его отправкой клиенту, что значительно сокращает общий объем передаваемых данных.

Вы можете использовать ссылку ниже, чтобы настроить сжатие на вашем экземпляре nginx.

http://www.devcha.com/2010/02/enable-gzip-compression-of-nginx.html

При сжатии обязательно используйте старые браузеры MSIE, которые не очень хорошо обрабатывают сжатие. Больше информации в Связанный пост

Во-вторых, по возможности используйте другой домен для своего статического контента. Это уменьшит размер клиентского запроса, потому что cookie не будет передан. Пример Yahoo использовал yimg.com для своего статического контента, то есть JS, CSS, изображений