Contenuto

    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.

    304 - Not Modified

    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 o If-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

    1. Il browser riceve una risposta dal server con un'immagine.
    2. 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.