web-dev-qa-db-ja.com

追加のクエリ文字列パラメーターを使用する場合、またはAJAXがオプションではない場合のInternet Explorer 11でのキャッシュPOSTキャッシュを回避する方法

私はこの質問が尋ねられたことに気づきましたが、現代のREST練習では、この質問の以前の反復もその答えも正確または十分ではありません。この質問に対する決定的な答えが必要です。

この問題はよく知られています。IE(11個であっても)AJAXリクエストをキャッシュしますが、これは本当に馬鹿げています。誰もがこれを理解しています。

notがよく理解されているのは、これまでの答えがどれも十分ではないということです。 SOに関するこの質問の以前のすべてのインスタンスは、次のいずれかによって十分に回答されたものとしてマークされます。

1)各リクエストで一意のクエリ文字列パラメーター(Unixタイムスタンプなど)を使用して、各リクエストURLを一意にし、キャッシュを防止します。

- または -

2)GETの代わりにPOSTを使用します。IEは特定の固有の状況を除き、POSTリクエストをキャッシュしません。

- または -

3)サーバーから渡される「cache-control」ヘッダーを使用します。

多く現代のREST AP​​Iプラクティスを含む状況でのIMO。これらの答えはどれも十分でも実用的でもありません。 REST AP​​IにはPOSTおよびGETリクエスト用の完全に異なるハンドラーがあり、動作が完全に異なるため、通常、POSTはGETの適切な代替手段ではありません。同様に、多くのAPIは厳密に検証されており、さまざまな理由で、予期しないクエリ文字列パラメーターを入力すると500または400エラーが生成されます。最後に、サーバー応答によって提供されるヘッダーを制御できないサードパーティまたはその他の柔軟性のないREST AP​​Iとインターフェイスすることが多く、キャッシュコントロールヘッダーを追加することはできません。

したがって、質問は次のとおりです。

I.E.を防ぐために、この状況でクライアント側で実行できることは本当に何もありませんAJAX GETリクエストの結果のキャッシュから?

64
stolli

通常、キャッシュは、サーバーからコンテンツが返されるときにコンテンツにヘッダーを設定することで制御されます。既にそれを行っており、IEがそれらを無視してキャッシュする場合、それを回避する唯一の方法は、質問で言及されているキャッシュ無効化手法の1つを使用することです。 APIの場合、適切なキャッシュヘッダーを使用していることを確認してから、キャッシュを無効化する方法を試してください。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ

Cache-control: no-cache
Cache-control: no-store
Pragma: no-cache
Expires: 0
54
Kevin B

APIを制御しない場合、ajax getsにリクエストヘッダーを追加することでIEキャッシュを無効にできる場合があります。

'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0'
0
Mark M