Mots-clé : vhosts

Php, AJAX et problèmes de cache sur iOS : comment les résoudre

J’ai expliqué qu’il fallait mettre, avant de faire le tout dernier ordre de sortie echo json_encode($resultat_final); les headers JSON.

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

On m’a demandé à quoi servaient les entête de cache. J’ai expliqué que ça servait à s’assurer que les interrogations AJAX se feraient toujours (notez le futur), c’est à dire à demander au navigateur de ne rien garder en cache.

Comme toujours, ma mémoire me fait défaut mais mon expérience reste, et je savais qu’il faut éviter tout risque de problème cache.
J’ai retrouvé une explication concrète du problème : certaines versions du navigateur Safari sur iOS6 ne réinterrogent pas les appels AJAX.

Il suffit donc de faire deux choses :

  • Soit modifier la configuration Apache (c’est pour ça que j’ai consacré quelques heures sur les hôtes virtuels et leur configuration) pour qu’il y ait ces entêtes par défaut :
    Header set Cache-Control "no-cache"
  • Soit faire ma solution directement en Php (mais ça implique de le faire dans tous les retours AJAX – ce qui ne gêne en rien pour les petits projets)
  • Soit préciser en JavaScript de modifier le header :
    $.ajaxSetup({
        type: 'POST',
        headers: { "cache-control": "no-cache" }
    });

Toutes les solutions sont prises via le site de questions/réponses de reférence : en Anglais ici.

Configuration Apache : « Directory » et directive « Options » : astuce pour comprendre plus vite

J’ai mis un peu de temps avant de le comprendre, mais c’est peut être parce que pour certains esprits comme le mien ça n’est pas forcément évident.

En résumé :

  • Effacer toutes les options et n’activer que FollowSymLinks :

    Options FollowSymLinks
  • Ajouter à toutes les options, l’option FollowSymLinks :

    Options +FollowSymLinks
  • Supprimer, si elle existe, l’option FollowSymLinks :

    Options -FollowSymLinks

Explication détaillée :
Lorsqu’on met en place une directive "Directory" dans le fichier de configuration d’un serveur Web Apache, on peut y ajouter la directive "Options".
Par exemple :

    <Directory "/web/htdocs/prod">
        Options Indexes
    </Directory>

Ce qu’il faut avoir en tête c’est que le fait de mettre un ordre après Options efface toutes les directives Options précédentes et n’applique que les ordres qui suivent.

Par exemple :

    <Directory "/web/htdocs/prod">
        Options FollowSymLinks
    </Directory>

Cela signifie que pour le répertoire "/web/htdocs/prod" il n’y aura que l’option FollowSymLinks d’activée.
A l’inverse si on avait ajouté un +, cela signifie « ajouter à toutes les options déjà existantes, FollowSymLinks.
De même si on avait ajouté un -, cela signifie « supprimer des options (si elle est présente) » FollowSymLinks.
Ça n’est pas du tout la même chose et même si, une fois qu’on l’a en tête, c’est très simple, ça peut paraître déroutant au début.