Maison >interface Web >js tutoriel >Pourquoi Safari met-il en cache les requêtes POST dans iOS 6 malgré les paramètres de contrôle du cache ?

Pourquoi Safari met-il en cache les requêtes POST dans iOS 6 malgré les paramètres de contrôle du cache ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-09 16:22:02785parcourir

Why Does Safari Cache POST Requests in iOS 6 Despite Cache Control Settings?

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 :

  • L'absence de Cache-Control headers
  • La présence de "Cache-Control: max-age=0" et d'un en-tête immédiat "Expires"

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn