iOS 6 Safari : mise en cache des appels $.ajax
Il a été observé que la vue Web de Safari dans iOS 6 mettait en cache les appels $.ajax, même lorsqu'il est explicitement spécifié de ne pas le faire. Ce comportement particulier a été rencontré dans le contexte des applications PhoneGap, qui utilisent Safari WebView.
Cause du problème de mise en cache
Une enquête a révélé que Safari met en cache les requêtes POST qui manque d'en-têtes Cache-Control ou contient l'en-tête "Cache-Control: max-age=0." Ce comportement découle d'une interprétation de la spécification HTTP, qui stipule que les réponses POST peuvent être mises en cache avec les en-têtes appropriés.
Solutions
Pour empêcher la mise en cache, le Cache-Control l'en-tête doit être défini sur "no-cache". Ceci peut être réalisé globalement dans les configurations Apache en utilisant :
Header set Cache-Control "no-cache"
Pour les requêtes POST spécifiquement, le même paramètre peut être appliqué en utilisant :
SetEnvIf Request_Method "POST" IS_POST Header set Cache-Control "no-cache" env=IS_POST
Alternativement, une solution de contournement consiste à modifier les signatures de fonction :
getNewRecordID(intRecordType, strTimestamp)
En ajoutant un paramètre d'horodatage à la signature de fonction, la requête change effectivement à chaque appel, empêchant la mise en cache.
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!