L'énigme du cache Safari dans iOS 6
L'introduction de Safari dans iOS 6 a soulevé des inquiétudes concernant sa gestion du cache pour les appels $.ajax. Plus précisément, les requêtes POST effectuées dans une application PhoneGap sont mises en cache malgré la définition explicite de la propriété cache sur false.
La cause profonde
Après une enquête approfondie, il a été découvert que Safari met en cache sélectivement les POST en fonction des critères suivants :
Conformément à la spécification HTTP, les réponses POST ne sont généralement pas mises en cache . Cependant, Safari sur iOS 6 semble exploiter une disposition qui permet la mise en cache avec les en-têtes Cache-Control ou Expires appropriés.
La solution de contournement
Pour empêcher Safari de mettre en cache le POST demandes, il est nécessaire de définir "Cache-Control: no-cache" dans les en-têtes de réponse. Cela garantit que Safari honore la directive de contournement du cache.
Pour une solution globale qui s'applique à tous les POST, ajoutez le code suivant à la configuration du serveur :
<code class="apache">Header set Cache-Control "no-cache"</code>
Si vous souhaitez uniquement désactiver mise en cache pour des POST spécifiques, vous pouvez utiliser le code suivant :
<code class="apache">SetEnvIf Request_Method "POST" IS_POST Header set Cache-Control "no-cache" env=IS_POST</code>
Remarque : Safari mettra toujours en cache les requêtes POST si les paramètres de la demande restent les mêmes. Pour éviter la mise en cache, modifiez les paramètres de la requête à chaque appel. Vous pouvez également ajouter un paramètre aléatoire à l'URL de la demande ou aux données POST pour garantir l'unicité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!