Google Chrome semble avoir une gestion du cache quelque peu discutable, notamment lorsqu’il s’agit des téléchargements. Une fois un fichier téléchargé, le navigateur ne se connecte plus au serveur afin de savoir s’il a ou non été modifié, mais utilise une version en cache et la télécharge localement comme si de rien n’était.

Je m’en suis rendu compte en travaillant sur un de mes sites. Je venais de remplacer une ressource par une autre, et son nom ayant changé, il me fallait faire une redirection 301 afin de prévenir les navigateurs et les crawlers de son nouvel emplacement.

Je fais donc très classiquement la redirection côté serveur, puis je redémarre.

rewrite ^/ancien/fichier$ /nouveau/fichier permanent;

Il semble, au passage, que Nginx fasse par défaut des redirections 302, et qu’il faille indiquer la directive permanent afin d’obtenir une 301. Dommage qu’ils n’aient pas implémenté un RedirectPermanent comme Apache, mais je m’égare.

Je relance le téléchargement afin de tester ma règle, et Chrome télécharge l’ancien fichier. Je teste avec Webkit, pas de soucis, la règle de réécriture est bien prise en compte. Je relance Chrome, le comportement ne change pas. Un coup d’oeil dans mes logs me confirme qu’aucune requête n’est reçue côté serveur.

Il a fallu que je vide explicitement le cache pour voir enfin une requête arriver à mon serveur. Je ne sais pas trop comment Chromium gère son cache, mais je m’attendais, dans le pire des cas, à un code de retour HTTP 304 en cas de règle incorrecte, mais certainement pas à ça.

Perry the Platypus wants you to subscribe now! Even if you don't visit my site on a regular basis, you can get the latest posts delivered to you for free via Email: