Maison > Article > interface Web > Pourquoi iOS 6 Safari met-il en cache les requêtes POST $.ajax même lorsque le cache est défini sur False ?
iOS 6 Safari Caching $.ajax Requêtes POST
Depuis la sortie d'iOS 6, les utilisateurs ont signalé un comportement de mise en cache inattendu lors de la création de $ Requêtes POST .ajax dans la vue Web de Safari. Malgré la définition de l'option de cache sur false, Safari met constamment en cache les réponses.
Cause
Le mécanisme de mise en cache agressif de Safari cible spécifiquement les requêtes POST qui présentent des signatures de fonction statiques, où l'entrée les paramètres restent constants et seules les données renvoyées varient. Par défaut, Safari considère ces requêtes comme pouvant être mises en cache et stocke leurs réponses pour une récupération future.
Solution
Pour contourner ce problème de mise en cache, modifiez la signature de la fonction pour introduire une dynamique paramètre. Par exemple, au lieu de :
getNewRecordID(intRecordType)
Utiliser :
getNewRecordID(intRecordType, strTimestamp)
En incorporant un horodatage ou un autre paramètre dynamique dans la signature de la fonction, Safari reconnaît la requête comme unique et évite de mettre en cache les résultats .
Raison sous-jacente
Le comportement de mise en cache de Safari découle d'une interprétation de la spécification HTTP, qui permet la mise en cache des réponses POST lorsque les en-têtes Cache-Control ou Expires appropriés sont inclus . Cependant, la mise en œuvre d'Apple étend cette mise en cache aux scénarios dans lesquels ces en-têtes sont absents ou définis sur « max-age=0 ».
No Cache-Control or Expires headers = iOS6 Safari will cache Cache-Control max-age=0 and an immediate Expires = iOS6 Safari will cache Cache-Control: no-cache = iOS6 Safari will NOT cache
Solution de contournement
Pour désactiver la mise en cache globalement pour toutes les requêtes POST, ajoutez la ligne suivante à la configuration Apache :
Header set Cache-Control "no-cache"
Alternativement, vous pouvez limiter ce comportement spécifiquement aux requêtes POST :
SetEnvIf Request_Method "POST" IS_POST Header set Cache-Control "no-cache" env=IS_POST
En modifiant la signature de la fonction et en intégrant ces modifications de mise en cache, vous pouvez restaurer le comportement attendu dans iOS 6 Safari et vous assurer que les requêtes POST ne sont pas mises 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!