Mir ist klar, dass diese Frage gestellt wurde, aber in der modernen REST-Praxis sind weder die vorherigen Iterationen dieser Frage noch ihre Antworten korrekt oder ausreichend. Eine endgültige Antwort auf diese Frage ist erforderlich.
Das Problem ist bekannt, IE (sogar 11) speichert AJAX-Anfragen zwischen, was wirklich sehr, sehr dumm ist. Jeder versteht das.
Was nicht gut verstanden wird, ist, dass keine der vorherigen Antworten ausreichend ist. Jede vorherige Instanz dieser Frage zu SO wird als ausreichend beantwortet gekennzeichnet durch:
1) Verwenden eines eindeutigen Abfragezeichenfolgenparameters (z. B. eines Unix-Zeitstempels) für jede Anforderung, um jede Anforderungs-URL eindeutig zu machen und so das Caching zu verhindern.
-- oder --
2) Verwenden von POST anstelle von GET, da der IE POST-Anforderungen nur unter bestimmten Umständen zwischenspeichert.
-- oder --
3) Verwenden von "Cache-Control" -Headern, die vom Server übergeben werden.
IMO ist in vielen Situationen, in denen moderne REST-API-Verfahren angewendet werden, keine dieser Antworten ausreichend oder praktisch. Eine REST-API verfügt über völlig unterschiedliche Handler für POST- und GET-Anforderungen mit völlig unterschiedlichem Verhalten. Daher ist POST normalerweise keine geeignete oder korrekte Alternative zu GET. Außerdem sind viele APIs streng validiert und generieren aus zahlreichen Gründen 500 oder 400 Fehler, wenn sie nicht erwartete Parameter für Abfragezeichenfolgen eingeben. Schließlich stellen wir häufig eine Schnittstelle zu REST-APIs von Drittanbietern oder auf andere Weise her, bei denen wir keine Kontrolle über die von der Serverantwort bereitgestellten Header haben und das Hinzufügen von Cache-Steuerungsheadern nicht in unserer Macht steht.
Die Frage ist also:
Gibt es in dieser Situation wirklich nichts, was auf der Clientseite getan werden kann, um zu verhindern, dass der IE die Ergebnisse einer AJAX GET-Anforderung zwischenspeichert?
quelle
Antworten:
Das Caching wird normalerweise durch Festlegen von Headern für den Inhalt gesteuert, wenn dieser vom Server zurückgegeben wird. Wenn Sie dies bereits tun und der Internet Explorer sie ignoriert und trotzdem zwischenspeichert, besteht die einzige Möglichkeit, dies zu umgehen, darin, eine der in Ihrer Frage genannten Cache-Busting-Techniken zu verwenden. Im Fall einer API ist es wahrscheinlich besser, sicherzustellen, dass Sie die richtigen Cache-Header verwenden, bevor Sie eine der Cache-Busting-Techniken ausprobieren.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ
Cache-control: no-cache Cache-control: no-store Pragma: no-cache Expires: 0
quelle
Wenn Sie die API nicht steuern, können Sie möglicherweise das IE-Caching deaktivieren, indem Sie Anforderungsheader zu den Ajax-Abrufen hinzufügen:
'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0'
quelle