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

Предотвращение 304 неизмененных запросов с помощью nginx

Я запускаю nginx, и у меня есть следующий блок до истечения срока действия:

expires 52w;

Однако, когда я использую инструменты разработчика Google Chrome для наблюдения за сетевым трафиком, некоторые ресурсы загружаются из кеша (200 - из кеша), в то время как большинство ресурсов отправляют запросы на сервер (304 Not Modified).

Я хочу загрузить все активы из кеша, если это возможно, без связи с сервером. (200-из кеша)

Что нужно изменить в моей конфигурации nginx?

Вы ищете expires max; Это устанавливает заголовок далекого будущего, который, по мнению большинства браузеров, означает, что даже не надо спрашивать, был ли изменен ресурс.

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

Во-первых, статус HTTP 304 не содержит тела сообщения, скорее, он не должен соответствовать описанию в спецификациях. Существуют также некоторые особые условия, основанные на валидаторах кеша, более подробную информацию смотрите в документации W3C.

О включении настройки кеширования на Nginx вот как я настроил кеширование

# all pages or URL patterns that are to be cached go here
location ~* \.do$ {
  expires -1;
}

# allow caching for static assets
location ~* \.(css|js|gif|jpe?g|png|svg)$ {
  expires 2w;
  add_header Pragma public;
  add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}

Вы должны обратиться к спецификациям HTTP IMHO; и полностью понять механизм кэширования и значение 304, он не передает те же данные, что и ответ 200.

Как указал Мартин, вы даете «директиву» и оставляете это на усмотрение, но браузер будет проверять, использовать ли кэшированную копию или нет. Кроме того, вы можете добавить age и max-age заголовки сохраняют max-age выше чем age чтобы иногда избежать даже 304.

И, наконец, если вы пытаетесь просмотреть эффект всего этого на странице путем обновления, вы все равно можете получить 304 ответа из-за запросов, инициированных браузерами, а это то, что вы действительно не можете контролировать AFAIK.