# ETag vagy Last-Modified

> A teszt azt nézi, hogy a nyitóoldal válasza küld-e ETag vagy Last-Modified fejlécet, amellyel a böngésző rövid 304-es válaszból megtudhatja, változott-e az oldal.

Az `ETag` és a `Last-Modified` válaszfejléc úgynevezett validátor: a böngésző a következő látogatáskor visszaküldi az értéket (`If-None-Match`, illetve `If-Modified-Since` kérésfejlécben), a szerver pedig, ha semmi nem változott, törzs nélküli `304 Not Modified` választ ad. A látogató így nem tölti le újra az egész oldalt. Ha egyik fejléc sincs, a lejárt gyorsítótári bejegyzést a böngészőnek mindig teljes egészében újra le kell töltenie.

## Hogyan mérjük

A riport a nyitóoldal válaszában keresi a két fejlécet.

- **Megfelelő:** van `ETag` vagy `Last-Modified` fejléc (elég az egyik).
- **Hiba:** egyik sincs.

A teszt nem ellenőrzi, hogy a szerver tényleg helyesen kezeli-e a feltételes kéréseket (a `304` választ), csak a fejlécek meglétét nézi. Csak a nyitóoldal HTML-jét méri.

## Hogyan javítsd

Statikus fájloknál (képek, CSS, JavaScript) a webszerver maga küldi ezeket: az nginx az `etag on;` alapbeállítással automatikusan generál `ETag` fejlécet a statikus fájlokhoz, az Apache a `FileETag` direktívával (alapértéke `MTime Size`) teszi ugyanezt. A kérdés a dinamikusan előállított HTML-nél merül fel, mert ott a webszerver nem tudja, mikor változott az oldal tartalma.

Ezért nincs egyetlen, minden oldalra érvényes kódrészlet: a helyes `ETag` vagy `Last-Modified` érték csak az oldalt előállító alkalmazás ismerete alapján adható meg. A lehetőségek:

1. **Oldal-gyorsítótár.** Ha a HTML kész fájlként vagy gyorsítótári bejegyzésként tárolódik, a gyorsítótár-megoldás dönti el, küld-e validátort; a bekapcsolás után a riporttal ellenőrizd, megjelent-e a fejléc. Lásd az [Oldal-gyorsítótár](https://hub.hellowp.io/hu/report/teljesitmeny/oldal-gyorsitotar/) oldalt.
2. **Az alkalmazás kódja.** Az alkalmazás a tartalom módosítási idejéből `Last-Modified` fejlécet, a tartalom lenyomatából `ETag` fejlécet küldhet, és a feltételes kérésre `304`-gyel válaszolhat.
3. **WordPress.** A WordPress referenciája szerint a core a `Last-Modified`, `ETag` és `304` válaszokat csak hírcsatornák (feed) kiszolgálásakor küldi. A hagyományos oldalakra ezt a gyorsítótár-megoldásnak vagy saját kódnak kell adnia.

Ha mindkét fejlécet el tudod küldeni, a web.dev az `ETag`-et javasolja, mert pontosabb: az `ETag` a tartalom alapján, a `Last-Modified` az idő alapján dönt.

## Hogyan ellenőrizd

Futtasd újra a riportot, vagy parancssorból:

```bash title="Terminál"
curl -sI https://pelda.hu/ | grep -iE "^(etag|last-modified)"
```

A feltételes kérés működését is kipróbálhatod: az előző válasz `ETag` értékével küldj `If-None-Match` fejlécet.

```bash title="Terminál"
curl -sI -H 'If-None-Match: "ide-az-etag-ertek"' https://pelda.hu/ | head -1
```

Ha az első sor `304 Not Modified`, a szerver jól kezeli a feltételes kéréseket.
