Jaka może być różnica między if-modified-since i if-none-match? Mam wrażenie, że jeśli-brak-dopasowania jest używane dla plików, a jeśli-zmodyfikowane-ponieważ jest używane dla stron?
89
Jeśli chodzi o różnice między Last-Modified/If-Modified-Since
i ETag/If-None-Match
:
Oba mogą być używane zamiennie. Jednak w zależności od typu zasobu i sposobu jego generowania na serwerze, jedno lub drugie pytanie („czy to zostało zmodyfikowane od…?” / „Czy nadal pasuje do tego ETag?”) Może być łatwiejsze do udzielenia odpowiedzi .
Przykłady:
mtime
jako Last-Modified
daty jest najprostszym rozwiązaniem.ETag
będzie dużo łatwiejsze. Zobacz te linki, aby uzyskać więcej informacji na ten temat:
If-Modified-Since
jest porównywany do,Last-Modified
gdyIf-None-Match
jest porównywany doETag
. ObaModified-Since
iETag
mogą służyć do identyfikacji określonego wariantu zasobu.Ale porównanie
If-Modified-Since
doLast-Modified
daje informację, czy buforowane wariant jest starsza lub nowsza natomiast porównanieIf-None-Match
doETag
po prostu daje informację, czy oba są identyczne lub nie. Ponadto większośćETag
generatorów zawiera informacje o i- węźle specyficznym dla systemu, więc przeniesienie pliku na inny dysk może również zmienićETag
.źródło
Wartość znacznika czasu używana w funkcji Last-Modified / If-Modified-Since ma ograniczoną precyzję - jedna sekunda, a to po prostu nie wystarcza w przypadku szybko zmieniających się treści, takich jak na przykład aplikacja do czatu internetowego, w której więcej niż jedna wiadomość może zostać opublikowana w danej sekundzie . ETag / If-None-Match może pomóc w rozwiązaniu tego problemu.
źródło
Jak stwierdzono w najlepszych praktykach Google:
https://developers.google.com/speed/docs/best-practices/caching
źródło
Last-Modified
withETag
(lub po stronie użytkownikaIf-Modified-Since
withIf-None-Match
). Podobnie specyfikacja W3 nie ogranicza cię. Mówi, aby nie używaćIf-Modified-Since
zIf-Match
, ale zakładam, że to dlatego, że zestaw dokumentów, które mają zaktualizowane daty, ale taką samą zawartość, jak zdefiniowana przez ETag, powinien być dość mały.If-Modified-Since używa daty, a If-None-Match używa ETag . Mogą być używane zarówno dla „stron” (tj. HTML), jak i dla innych plików.
źródło
O ile serwer nie określił jako słaby, ETag jest uważany za silny walidator i dlatego może być użyty do spełnienia warunkowego żądania zasięgowego. Jednak większość automatycznie generowanych ETagów wykazuje trudności w sytuacjach farmy serwerów, ponieważ często używają informacji i / lub unikalnego trwałego licznika. W praktyce stwierdziłem, że nagłówek Last Modified jest wystarczający dla dość statycznej zawartości, np. Obsługującej chronioną statyczną zawartość, ponieważ czas zapisu pliku jest dość dobrym walidatorem.
ETag jest zdecydowanie najbardziej elastyczny. Klienci spełniający wymagania są zobowiązani do wysłania ETag w żądaniu warunkowym, natomiast POWINNI wysłać oba, jeśli są dostępne.
źródło
Nagłówek If-Modified-Since służy do określenia czasu, w którym przeglądarka ostatnio otrzymała żądany zasób. Nagłówek If-None-Match służy do określenia znacznika jednostki, który serwer wystawił z żądanym zasobem, gdy został on ostatnio odebrany.
Na dwa opisane sposoby, te nagłówki są używane do obsługi buforowania zawartości w przeglądarce i umożliwiają serwerowi instruowanie przeglądarki, aby używała kopii zasobu w pamięci podręcznej, zamiast odpowiadać pełną zawartością zasobu, jeśli tak jest niekoniecznie.
źródło