Risposta del server 304 Not Modified
Caratteristiche principali del codice di stato HTTP 304
Il codice di stato HTTP 304 (Not Modified) è una risposta del server che indica che la risorsa richiesta non è stata modificata dall'ultimo accesso del client. Questo codice è utilizzato per ottimizzare il caching, evitando la trasmissione di dati che non sono cambiati.
Definizione e scopo
Il codice 304 serve a comunicare al client che può continuare a utilizzare la copia della risorsa già presente nella cache, riducendo così il carico di rete e migliorando le performance.
Funzionamento del meccanismo di caching con il 304
Quando un client richiede una risorsa, può inviare al server delle intestazioni di richiesta specifiche per il caching. Se il server determina che la risorsa non è cambiata, restituisce un codice 304, evitando di trasmettere nuovamente il corpo della risposta.
Condizioni per il ritorno del codice 304
- La richiesta del client include intestazioni come
If-Modified-Since
oIf-None-Match
. - La risorsa non è stata modificata rispetto all'ultima versione conosciuta dal client.
Esempi pratici di utilizzo del codice di stato 304
Esempio di caching delle immagini su un sito web
Quando un utente visita un sito web, il browser può salvare le immagini in cache. Se l'utente torna a visitare la pagina, il browser invia una richiesta al server con le intestazioni appropriate.
Come il browser salva la cache
- Il browser riceve una risposta dal server con un'immagine.
- Salva l'immagine nella cache locale per un accesso futuro.
Comportamento alla richiesta successiva
Alla successiva richiesta della stessa immagine, il browser invia un'intestazione If-Modified-Since
. Se l'immagine non è cambiata, il server risponde con un codice 304.
Esempio con API
In un'API, il codice 304 può essere utilizzato per ottimizzare le richieste a risorse che non cambiano frequentemente. I client possono inviare richieste con intestazioni di caching, e se le risorse non sono state modificate, il server risponderà con 304.
Esempio con intestazioni If-Modified-Since e If-None-Match
Queste intestazioni vengono utilizzate per comunicare con il server su quando è stata l'ultima volta che il client ha ricevuto una risposta. Se il server verifica che i dati non sono cambiati, restituisce un 304.
Come risolvere problemi con il codice 304 in vari linguaggi di programmazione
PHP
Per configurare correttamente il caching in PHP, è necessario impostare le intestazioni in modo che il server possa rispondere adeguatamente.
Esempio di codice per gestire richieste e restituire il codice 304
<?php header("Cache-Control: max-age=3600"); if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { $lastModified = strtotime("Tue, 01 Jan 2023 00:00:00 GMT"); if ($lastModified <= strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { header("HTTP/1.1 304 Not Modified"); exit(); } } ?>
Python (Flask)
In Flask, è possibile configurare il caching nel seguente modo.
Esempio di codice per il controllo delle condizioni di caching
from flask import Flask, request, make_response app = Flask(__name__) @app.route('/resource') def resource(): last_modified = 'Tue, 01 Jan 2023 00:00:00 GMT' response = make_response("Contenuto della risorsa") response.headers['Last-Modified'] = last_modified if request.headers.get('If-Modified-Since') == last_modified: return '', 304 return response
Node.js (Express)
In Express, è possibile gestire le richieste utilizzando il codice 304.
Esempio di codice per lavorare con intestazioni If-Modified-Since
const express = require('express'); const app = express(); app.get('/resource', (req, res) => { const lastModified = new Date('2023-01-01T00:00:00Z'); res.set('Last-Modified', lastModified.toUTCString()); if (req.headers['if-modified-since'] === lastModified.toUTCString()) { return res.status(304).end(); } res.send("Contenuto della risorsa"); });
Errori comuni e come risolverli
Configurazione errata del caching sul server
Assicurarsi che le intestazioni di caching siano configurate correttamente per evitare risposte inaspettate.
Errori nelle intestazioni della richiesta
Verificare che le intestazioni If-Modified-Since
e If-None-Match
siano formulate correttamente nel client.
Come verificare e fare il debug del codice 304
Utilizzare strumenti di rete nel browser o software di debug per monitorare le intestazioni delle richieste e delle risposte, garantendo che il codice 304 venga gestito correttamente.
Il codice 304 svolge un ruolo cruciale nell'ottimizzazione delle prestazioni delle applicazioni web e delle API, riducendo la quantità di dati trasmessi e migliorando l'efficienza generale.
Condizione | Intestazione | Risposta del Server |
---|---|---|
Risorsa non modificata | If-Modified-Since | 304 Not Modified |
Risorsa modificata | If-Modified-Since | 200 OK |
Risorsa non modificata | If-None-Match | 304 Not Modified |
Utilizzare il codice di stato 304 in modo efficace può portare a significativi miglioramenti nelle prestazioni delle applicazioni, consentendo una migliore esperienza utente e un utilizzo più efficiente delle risorse di rete.