Для вашого останнього запитання, чому? Спробую пояснити тим, що знаю
Коротке пояснення цих трьох кодів статусу в умовах непростої людини.
- 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 може використовувати декілька серверів для надання вмісту, якщо ці сервери мають різні конфігурації. Тоді ці статуси можуть змінитися. Сподіваюся, це допомагає.