Maison >interface Web >js tutoriel >Pourquoi Safari met-il en cache les requêtes POST dans iOS 6 malgré « cache:false » ?

Pourquoi Safari met-il en cache les requêtes POST dans iOS 6 malgré « cache:false » ?

DDD
DDDoriginal
2024-11-03 21:12:03256parcourir

Why Does Safari Cache POST Requests in iOS 6 Despite

Énigme de la mise en cache : récupération sélective de Safari dans iOS 6

Depuis la sortie d'iOS 6, les développeurs ont rencontré un comportement inattendu dans la vue Web de Safari : $ Les appels .ajax POST sont obstinément mis en cache malgré les paramètres cache:false. Curieusement, cette anomalie ne se manifeste que lorsque la fonction appelée utilise une signature statique.

Des enquêtes préliminaires ont révélé que Safari met en cache les réponses POST uniquement si elles manquent d'en-têtes Cache-Control ou Expires ou si Cache-Control est défini sur max-age. =0. Cependant, accorder la requête « Cache-Control : no-cache » contourne ce comportement, empêchant complètement la mise en cache.

La décision d'Apple d'exploiter cette disposition de la spécification HTTP pour les méthodes POST (section 9.5) a laissé les développeurs perplexes. Bien que la mise en cache des réponses POST ne soit pas rare, le choix de Safari de le faire sans aucun en-tête ou avec max-age=0 semble être un écart par rapport au comportement conventionnel du navigateur.

Pour résoudre ce dilemme de mise en cache, une solution globale au sein une configuration Apache est la suivante :

Header set Cache-Control "no-cache"

Cependant, si l'on préfère appliquer sélectivement la directive "no-cache" aux seules requêtes POST, Apache propose une solution :

SetEnvIf Request_Method "POST" IS_POST
Header set Cache-Control "no-cache" env=IS_POST

Alternativement , l'ajout d'un paramètre unique à l'URL ou aux données POST peut contourner le problème de mise en cache des signatures de fonctions statiques.

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