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 ?

Pourquoi iOS 6 Safari met-il en cache les requêtes POST $.ajax même lorsque le cache est défini sur False ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 09:23:30193parcourir

Why Does iOS 6 Safari Cache $.ajax POST Requests Even When Cache is Set to 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!

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