304 Not Modified

Die zwischengespeicherte Kopie ist noch gültig.

Wann du ihn verwendest

Als Antwort auf eine bedingte Anfrage mit If-None-Match oder If-Modified-Since.

Gut zu wissen

304 beantwortet eine bedingte Anfrage. Wenn eine Antwort einen ETag- oder Last-Modified-Header trägt, sendet der Browser später If-None-Match oder If-Modified-Since, und der Server antwortet mit 304 ohne Body, wenn sich nichts geändert hat, was Bandbreite spart. Eine 304 sollte Header wie ETag, Cache-Control und Vary wiederholen, damit der Cache seine gespeicherte Kopie und deren Ablaufzeit aktualisieren kann.

Pro Maschine erzeugte ETags, etwa Apaches alte inode-basierte, unterscheiden sich zwischen Servern hinter einem Load Balancer, sodass Clients selten eine 304 bekommen. Auch Kompression kann ETags ändern oder abschwächen. In den DevTools überträgt eine 304 einige hundert Bytes, während „from disk cache“ mit Status 200 bedeutet, dass gar keine Anfrage gestellt wurde. fetch verbirgt Revalidierungen des Browsers und meldet sie als 200 mit dem gecachten Body.

Weiterleitung (3xx)

3xx-Codes sind Weiterleitungen: Der Client muss woandershin oder seine zwischengespeicherte Kopie verwenden, um die Anfrage abzuschließen.

So sieht es aus

HTTP/1.1 304 Not Modified

So sendest du ihn

Node.js / Expressres.status(304).end()
Python / Flaskreturn '', 304
nginxreturn 304;

So prüfst du ihn

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP-Statuscodes öffnen