Odpověď serveru 304 Not Modified
HTTP status kód 304 (Not Modified)
HTTP status kód 304 (Not Modified) je odpověď serveru, která indikuje, že požadovaný zdroj nebyl od posledního požadavku klienta změněn. Tento kód slouží k optimalizaci práce s cachingem, čímž se vyhýbá přenosu dat, která se nezměnila. Použití status kódu 304 je klíčové pro efektivní správu šířky pásma a zrychlení načítání stránek.
1. Hlavní charakteristiky status kódu 304
- Definice a účel: Status kód 304 informuje klienta, že jeho poslední verze požadovaného zdroje je stále aktuální a není třeba ji znovu stahovat.
- Jak funguje mechanismus cachingu pomocí 304: Když klient poprvé požádá o zdroj, server mu pošle obsah spolu s hlavičkou, která obsahuje informace o poslední změně. Při následném požadavku klient posílá hlavičky jako
If-Modified-Since
neboIf-None-Match
. Pokud se server shoduje, vrátí status 304. - Podmínky, za kterých server vrací status 304: Server vrátí tento status, pokud jsou splněny podmínky pro caching a obsah se od posledního požadavku nezměnil.
2. Praktické příklady použití status kódu 304
Příklad s cachováním obrázků na webové stránce
Při načítání obrázků na webové stránce může prohlížeč uložit obrázky do cache. Při dalším načtení stránky prohlížeč znovu odešle požadavek na server, ale server může vrátit status 304, pokud se obrázek nezměnil.
Jak prohlížeč ukládá cache
Když prohlížeč obdrží odpověď s obrázkem poprvé, uloží ho do cache. Při dalším požadavku na tento obrázek prohlížeč odešle hlavičky, které obsahují informace o poslední změně obrázku.
Chování při opakovaném požadavku
Pokud se obrázek nezměnil, server vrátí status 304 a neodešle znovu obsah obrázku, což šetří šířku pásma.
Příklad s API
Status 304 může být také využit při práci s API. Pokud klient žádá o data, která se nezměnila od posledního požadavku, server může vrátit status 304 a tím minimalizovat přenos dat.
Příklad se záhlavími If-Modified-Since a If-None-Match
Klient může posílat záhlaví If-Modified-Since
, které obsahuje datum poslední změny, nebo If-None-Match
, které používá etag. Server porovná tyto hodnoty a pokud se shodují, vrátí status 304.
3. Jak opravit problémy se statusem 304 v různých programovacích jazycích
PHP
- Jak správně nastavit záhlaví pro caching: Použijte funkce pro nastavení záhlaví, které informují prohlížeč o možnosti cachování.
- Příklad kódu pro zpracování požadavků a vracení statusu 304:
<?php header('Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT'); if (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == strtotime('Wed, 21 Oct 2023 07:28:00 GMT')) { header('HTTP/1.1 304 Not Modified'); exit(); } ?>
Python (Flask)
- Jak nastavit caching a zpracování statusu 304: Ujistěte se, že server správně kontroluje podmínky pro cachování.
- Příklad kódu pro kontrolu podmínek caching:
from flask import Flask, request, make_response from datetime import datetime app = Flask(__name__) @app.route('/resource') def resource(): last_modified = datetime(2023, 10, 21, 7, 28, 0) response = make_response("Data") response.headers['Last-Modified'] = last_modified if request.headers.get('If-Modified-Since') == last_modified.strftime("%a, %d %b %Y %H:%M:%S GMT"): return '', 304 return response
Node.js (Express)
- Jak zpracovávat požadavky s použitím statusu 304: Použijte middleware pro správu caching hlaviček.
- Příklad kódu pro práci se záhlavími If-Modified-Since:
const express = require('express'); const app = express(); app.get('/resource', (req, res) => { const lastModified = new Date('2023-10-21T07:28:00Z'); res.set('Last-Modified', lastModified.toUTCString()); if (req.headers['if-modified-since'] === lastModified.toUTCString()) { return res.status(304).end(); } res.send('Data'); });
4. Často se vyskytující chyby a způsoby jejich odstranění
Chyba | Popis | Řešení |
---|---|---|
Nesprávné nastavení cachingu na serveru | Server nemusí správně vracet status 304. | Zkontrolujte konfiguraci serveru a záhlaví pro caching. |
Chyby v záhlaví požadavku | Klient nemusí správně posílat záhlaví If-Modified-Since. | Ověřte, že klient správně nastavuje hlavičky. |
Jak zkontrolovat a odladit status 304 | Obtíže při sledování, kdy je status 304 vrácen. | Použijte nástroje pro ladění a sledování HTTP požadavků. |