Na twoje ostatnie pytanie, dlaczego? Spróbuję wyjaśnić to, co wiem
Krótkie wyjaśnienie tych trzech kodów statusu w kategoriach laika.
- 200 - sukces (żądania przeglądarki i pobranie pliku z serwera)
Jeśli buforowanie jest włączone na serwerze
- 200 (z pamięci podręcznej) - plik znaleziony w przeglądarce, więc przeglądarka nie wysyła żądania z serwera
- 304 - przeglądarka żąda pliku, ale jest odrzucany przez serwer
W przypadku niektórych plików przeglądarka decyduje się na żądanie z serwera, a dla niektórych decyduje się na odczyt z zapisanych (buforowanych) plików. Dlaczego to ? Każdy plik ma datę ważności, więc
Jeśli plik nie wygasł, przeglądarka będzie korzystać z pamięci podręcznej (200 pamięci podręcznej).
Jeśli plik wygasł, przeglądarka żąda serwera pliku. Plik kontrolny serwera w obu miejscach (przeglądarka i serwer). Jeśli znaleziono ten sam plik, serwer odrzuca żądanie. Zgodnie z protokołem przeglądarka wykorzystuje istniejący plik.
spójrz na tę konfigurację nginx
location / {
add_header Cache-Control must-revalidate;
expires 60;
etag on;
...
}
Tutaj wygaśnięcie jest ustawione na 60 sekund, więc wszystkie pliki statyczne są buforowane przez 60 sekund. Więc jeśli poprosisz o plik ponownie w ciągu 60 sekund, przeglądarka odczyta z pamięci (200 pamięci). Jeśli poprosisz po 60 sekundach, przeglądarka zażąda serwera (304).
Zakładałem, że plik nie zostanie zmieniony po 60 sekundach, w takim przypadku otrzymasz 200 (tzn. Zaktualizowany plik zostanie pobrany z serwera).
Tak więc, jeśli serwery są skonfigurowane z różnymi wygasającymi i buforującymi nagłówkami (politykami), stan może się różnić.
W twoim przypadku używasz cdn, głównym celem cdn jest wysoka dostępność i szybka dostawa. Dlatego używają wielu serwerów. Chociaż wygląda na to, że pliki znajdują się w tym samym katalogu, cdn może używać wielu serwerów do udostępniania treści, jeśli serwery te mają różne konfiguracje. Następnie te statusy mogą ulec zmianie. Mam nadzieję, że to pomoże.