Różnią się one nieznacznie - znacznik ETag nie zawiera żadnych informacji, których klient mógłby użyć, aby ustalić, czy ponownie poprosić o ten plik w przyszłości. Jeśli ETag jest wszystkim, co ma, zawsze będzie musiał złożyć wniosek. Jednak gdy serwer odczytuje ETag z żądania klienta, serwer może następnie ustalić, czy wysłać plik (HTTP 200), czy też nakazać klientowi, aby po prostu użył swojej kopii lokalnej (HTTP 304). ETag jest w zasadzie tylko sumą kontrolną dla pliku, który zmienia się semantycznie, gdy zmienia się zawartość pliku.
Nagłówek Expires jest używany przez klienta (i serwery proxy / pamięci podręczne) w celu ustalenia, czy w ogóle musi on wysłać żądanie do serwera. Im bliżej daty wygaśnięcia, tym większe prawdopodobieństwo, że klient (lub serwer proxy) wyśle żądanie HTTP dla tego pliku z serwera.
Tak naprawdę to, co chcesz zrobić, to UŻYWAĆ ZARÓWNO nagłówków - ustaw nagłówek Expires na rozsądną wartość na podstawie częstotliwości zmian zawartości. Następnie skonfiguruj ETag, aby były wysyłane, aby kiedy klienci WYślą żądanie do serwera, łatwiej będzie ustalić, czy odesłać plik z powrotem.
Ostatnia uwaga na temat ETag - jeśli używasz konfiguracji serwera z równoważeniem obciążenia na wielu komputerach z uruchomionym Apache, prawdopodobnie będziesz chciał wyłączyć generowanie ETag. Wynika to z faktu, że i-węzły są używane jako część algorytmu skrótu ETag, który będzie różny dla poszczególnych serwerów. Możesz skonfigurować Apache, aby nie używał i-węzłów jako części obliczeń, ale wtedy chcesz się upewnić, że znaczniki czasu w plikach są dokładnie takie same, aby zapewnić wygenerowanie tego samego znacznika ETag dla wszystkich serwerów.