Heim >Web-Frontend >js-Tutorial >Warum speichert iOS 6 Safari $.ajax-POST-Anfragen im Cache, selbst wenn der Cache auf „Falsch' gesetzt ist?
iOS 6 Safari $.ajax POST-Anfragen zwischenspeichern
Seit der Veröffentlichung von iOS 6 haben Benutzer ein unerwartetes Caching-Verhalten beim Erstellen von $ gemeldet .ajax POST-Anfragen in der Webansicht von Safari. Obwohl die Cache-Option auf „false“ gesetzt ist, speichert Safari die Antworten dauerhaft zwischen.
Ursache
Der aggressive Caching-Mechanismus von Safari zielt speziell auf POST-Anfragen ab, die statische Funktionssignaturen aufweisen, bei denen die Eingabe erfolgt Die Parameter bleiben konstant und nur die zurückgegebenen Daten variieren. Standardmäßig betrachtet Safari solche Anfragen als zwischenspeicherbar und speichert ihre Antworten zum späteren Abruf.
Lösung
Um dieses Caching-Problem zu umgehen, ändern Sie die Funktionssignatur, um eine Dynamik einzuführen Parameter. Beispielsweise anstelle von:
getNewRecordID(intRecordType)
Verwenden Sie:
getNewRecordID(intRecordType, strTimestamp)
Durch die Einbindung eines Zeitstempels oder eines anderen dynamischen Parameters in die Funktionssignatur erkennt Safari die Anfrage als eindeutig und vermeidet das Zwischenspeichern der Ergebnisse .
Grundlegender Grund
Safari Das Caching-Verhalten ergibt sich aus einer Interpretation der HTTP-Spezifikation, die das Caching von POST-Antworten ermöglicht, wenn entsprechende Cache-Control- oder Expires-Header enthalten sind. Die Implementierung von Apple erweitert dieses Caching jedoch auf Szenarien, in denen diese Header fehlen oder auf „max-age=0“ gesetzt sind.
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
Problemumgehung
So deaktivieren Sie das Caching global für alle POST-Anfragen, fügen Sie der Apache-Konfiguration die folgende Zeile hinzu:
Header set Cache-Control "no-cache"
Alternativ können Sie dieses Verhalten gezielt auf beschränken POST-Anfragen:
SetEnvIf Request_Method "POST" IS_POST Header set Cache-Control "no-cache" env=IS_POST
Durch Ändern der Funktionssignatur und Einbeziehen dieser Caching-Änderungen können Sie das erwartete Verhalten in iOS 6 Safari wiederherstellen und sicherstellen, dass POST-Anfragen nicht zwischengespeichert werden.
Das obige ist der detaillierte Inhalt vonWarum speichert iOS 6 Safari $.ajax-POST-Anfragen im Cache, selbst wenn der Cache auf „Falsch' gesetzt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!