Heim >Web-Frontend >js-Tutorial >Warum speichert iOS 6 Safari $.ajax-POST-Anfragen im Cache, selbst wenn der Cache auf „Falsch' gesetzt ist?

Warum speichert iOS 6 Safari $.ajax-POST-Anfragen im Cache, selbst wenn der Cache auf „Falsch' gesetzt ist?

Susan Sarandon
Susan SarandonOriginal
2024-11-03 09:23:30249Durchsuche

Why Does iOS 6 Safari Cache $.ajax POST Requests Even When Cache is Set to False?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn