На ваш последний вопрос, почему? Я постараюсь объяснить, что я знаю
Краткое объяснение этих трех кодов состояния в терминах непрофессионала.
- 200 - успех (запросы браузера и получение файла с сервера)
Если на сервере включено кеширование
- 200 (из кеша памяти) - файл найден в браузере, поэтому браузер не отправляет запрос с сервера
- 304 - браузер запрашивает файл, но он отклоняется сервером
Для некоторых файлов браузер решает запросить с сервера, а для некоторых - для чтения из сохраненных (кэшированных) файлов. Почему это ? Каждый файл имеет срок годности, поэтому
Если срок действия файла не истек, то браузер будет использовать из кеша (200 кеш).
Если срок действия файла истек, браузер запрашивает файл у сервера. Файл проверки сервера в обоих местах (браузер и сервер). Если тот же файл найден, сервер отклоняет запрос. Согласно протоколу браузер использует существующий файл.
посмотрите на эту конфигурацию nginx
location / {
add_header Cache-Control must-revalidate;
expires 60;
etag on;
...
}
Здесь истекает 60 секунд, поэтому все статические файлы кэшируются в течение 60 секунд. Таким образом, если вы запросите файл снова в течение 60 секунд, браузер будет читать из памяти (200 памяти). Если вы запросите через 60 секунд, браузер запросит сервер (304).
Я предполагал, что файл не будет изменен через 60 секунд, в этом случае вы получите 200 (т.е. обновленный файл будет загружен с сервера).
Таким образом, если серверы настроены с разными заголовками (политиками) с истекающим сроком действия и кэшированием, состояние может отличаться.
В вашем случае вы используете cdn, основное назначение cdn - это высокая доступность и быстрая доставка. Поэтому они используют несколько серверов. Даже если кажется, что файлы находятся в одном каталоге, cdn может использовать несколько серверов для предоставления контента, если эти серверы имеют разные конфигурации. Тогда эти статусы могут измениться. Надеюсь, поможет.