Подтвердить что ты не робот

Chrome - почему он отправляет if-modified-since запросы?

У меня есть страница с большим количеством небольших изображений (значков). При использовании с хром каждый раз, когда страница перезагружается, хром запрашивает каждый значок с сервера с заголовком if-modified-since.

Все значки подаются с истечениями и максимальными заголовками. Firefox загружает изображения из своего кеша.

Почему хром делает это и как я могу его предотвратить?

Спасибо

4b9b3361

Ответ 1

Вы проверили заголовки запроса?

"'Cache-Control всегда установлен на' max-age = 0 ', независимо от того, нажимаете ли вы кнопку enter, f5 или ctrl + f5. Если вы запустите Chrome и введите url и нажмите enter."

http://techblog.tilllate.com/2008/11/14/clientside-cache-control/

Ответ 2

С хром важно, обновляете ли вы страницу или просто посещаете ее.

Когда вы обновляете, хром будет пинговать сервер для каждого файла независимо от того, были ли они уже кэшированы или нет. Если файл не был изменен, вы должны увидеть ответ 304 Not Modified. Если файл был изменен, вы увидите ответ 200 OK.

Когда не обновляется, кешированные файлы будут иметь статус 200 OK, но если вы посмотрите в столбце size/content на сетевой панели, вы увидите (из кеша).

Ответ 3

Google Chrome будет игнорировать заголовок Expires, если он не будет действительной датой RFC. Например, для указания времени в двойном разряде всегда требуются дни. 1 мая должно быть установлено как "01 мая" (не "1 мая" ) и так далее. Firefox принимает их, это вводит пользователя в заблуждение, что проблема в браузере (в данном случае, в Chrome), а не сами значения заголовка.

Итак, если вы устанавливаете дату истечения срока действия вручную (не используя mod_expires или что-то подобное для расчета фактической даты), я рекомендую вам проверить свои статические заголовки файлов, используя REDbot.

Ответ 4

Быстрый эксперимент с инспектором Chromes показывает, что это происходит только при перезагрузке страницы, а не при нормальной загрузке. Chrome просто пытается обновить свой кеш. Подумайте об этом - если вы установили Expires и Max-Age несколько десятилетий, вы просите браузер кэшировать этот ресурс и никогда не проверять, обновляется ли он? Его кеширование ресурсов, когда это возможно, но когда страница нуждается в обновлении, она хочет убедиться, что вся страница обновлена. Другие браузеры, конечно же, делают это тоже (хотя у некоторых есть опция для количества часов, ожидающих до обновления).

Благодаря современным браузерам и серверам обновление большого количества значков будет не таким медленным, как вы думаете, - запросы конвейерно устранены, чтобы устранить многочисленные задержки в оба конца, а вся цель заголовка If-Modified-Since - разрешить серверу сравнить временные метки и вернуть код состояния "Не изменен". Это произойдет для каждого ресурса, который нужен странице, но браузер сможет сразу выполнить все запросы и убедиться, что ни один из них не изменился.

Тем не менее, есть несколько вещей, которые вы можете сделать, чтобы сделать это проще:

  • В инспекторе Chromes используйте вкладку ресурсов, чтобы посмотреть, как они загружаются. Если заголовков запросов нет, ресурс загружается непосредственно из кеша. Если вы видите 304 Not Modified, ресурс обновился, но его не нужно было загружать снова. Если вы видите 200 OK, он был загружен снова.

  • В инспекторе Chromes используйте вкладку аудитов, чтобы узнать, что он думает о кешируемости ваших ресурсов, на всякий случай, если некоторые из заголовков кеша будут оптимальными.

  • Все эти If-Modified-Since запросы и 304 ответы могут складываться, хотя они состоят только из заголовков. Объедините изображения в спрайты, чтобы уменьшить количество запросов.

Ответ 6

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

Ответ 7

Предполагая, что вы используете Apache, вы можете попытаться явно настроить время жизни кеша для определенных типов файлов и/или местоположений в файловой системе.

<FilesMatch ".(jpg|jpeg|png|gif)$">
Header set Cache-Control "max-age=604800, public" # 7 days
</FilesMatch>

или что-то вроде

ExpiresByType image/jpeg "access plus 7 days"
ExpiresByType image/gif "access plus 7 days"
ExpiresByType image/png "access plus 7 days"

Как правило, я группирую типы файлов, используя их в одном каталоге и соответственно устанавливая сроки жизни.

Браузеры не должны запрашивать файлы вообще до тех пор, пока эти возрасты не будут истекли, но не всегда могут его почитать. Возможно, вам понадобится futz с заголовками Last-Modified и ETag. В Интернете есть много хорошей информации.