Contenu

    Réponse du serveur 304 Not Modified

    HTTP statut 304 (Not Modified)

    Le code de statut HTTP 304, ou "Not Modified", est une réponse du serveur indiquant que la ressource demandée n'a pas été modifiée depuis la dernière requête effectuée par le client. Ce code joue un rôle essentiel dans l'optimisation du cache, permettant d'éviter le transfert de données qui n'ont pas changé.

    304 - Not Modified

    Caractéristiques principales du statut 304

    • Définition et objectif: Le code 304 informe le client que le contenu de la ressource est inchangé, ce qui permet de réduire la bande passante utilisée.
    • Fonctionnement du mécanisme de cache: Lorsqu'un client demande une ressource, il peut inclure des en-têtes de cache. Si la ressource n'a pas été modifiée, le serveur renvoie un 304 au lieu des données.
    • Conditions de retour d'un statut 304: Le serveur renvoie un 304 lorsque le client envoie des en-têtes "If-Modified-Since" ou "If-None-Match", indiquant qu'il souhaite vérifier si la ressource a changé.

    Exemples pratiques d'utilisation du statut 304

    Exemple de cache d'images sur un site web

    • Comment le navigateur conserve le cache: Lorsqu'un utilisateur visite un site, les images sont souvent stockées en cache pour éviter de les télécharger à chaque visite.
    • Comportement lors d'une nouvelle requête: Si l'utilisateur revisite le site, le navigateur envoie une requête avec les en-têtes de cache. Si l'image n'a pas changé, le serveur renvoie un 304.

    Exemple avec une API

    • Optimisation des requêtes: Lorsqu'une application interroge une API pour récupérer des données, un statut 304 permet de réduire le volume de données échangées si les données n'ont pas été modifiées.

    Exemple avec les en-têtes If-Modified-Since et If-None-Match

    Ces en-têtes permettent au client de spécifier une date ou une version de la ressource. Le serveur peut alors comparer ces valeurs avec les données actuelles et renvoyer un 304 si aucune modification n'est détectée.

    Traitement des problèmes avec le statut 304 dans différents langages de programmation

    PHP

    • Configurer les en-têtes de cache: Pour que le serveur renvoie un 304, il est essentiel d'établir correctement les en-têtes de cache.
    • Exemple de code:
              <?php
              header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
              if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && 
                  strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= strtotime("date de la ressource")) {
                  header("HTTP/1.1 304 Not Modified");
                  exit();
              }
              ?>
              

    Python (Flask)

    • Configurer le cache et traiter le statut 304: L'utilisation de Flask permet de gérer facilement les en-têtes de cache.
    • Exemple de code:
              from flask import Flask, request, make_response
              app = Flask(__name__)
      
              @app.route('/ressource')
              def ressource():
                  response = make_response('Contenu de la ressource')
                  response.headers['Last-Modified'] = 'date de la ressource'
                  if request.headers.get('If-Modified-Since') == 'date de la ressource':
                      response.status_code = 304
                      return response
                  return response
              

    Node.js (Express)

    • Traitement des requêtes avec le statut 304: Express facilite la gestion des en-têtes de requête.
    • Exemple de code:
              const express = require('express');
              const app = express();
      
              app.get('/ressource', (req, res) => {
                  const lastModified = 'date de la ressource';
                  res.set('Last-Modified', lastModified);
                  if (req.headers['if-modified-since'] === lastModified) {
                      res.status(304).end();
                  } else {
                      res.send('Contenu de la ressource');
                  }
              });
              

    Erreurs courantes et solutions

    • Mauvaise configuration du cache sur le serveur: Assurez-vous que les en-têtes de cache sont correctement configurés pour permettre la gestion des requêtes 304.
    • Erreurs dans les en-têtes de requête: Vérifiez que les en-têtes envoyés par le client sont bien formatés et contiennent les informations nécessaires.
    • Vérification et débogage du statut 304: Utilisez des outils de développement pour surveiller les requêtes et les réponses, afin d'identifier les problèmes de cache.
    Langage Configuration du cache Exemple de code
    PHP Header Last-Modified Voir exemple ci-dessus
    Python (Flask) Response headers Voir exemple ci-dessus
    Node.js (Express) Set Last-Modified Voir exemple ci-dessus