2009-03-24 7 views
7

現在普及しているブラウザの中には、私が知っておく必要のある* XMLHttpRequestレスポンスをキャッシュするのに特に問題がありますか?XMLHTTPRequestレスポンスのキャッシュに問題があるブラウザはどれですか?

私は、ページのタイプに関連するコンテンツ(つまりJSON)やビヘイビア(eval()ed Javascriptなど)を動的にロードする方法として、すべてのページにXMLHttpRequestクエリを含めることができますが、サーバーが正しいヘッダーを送信した場合は、サーバーから受信したリソースをキャッシュできることを確認してください。

Firefox 1.1などのブラウザでXMLHTTPRequestで取得したコンテンツをキャッシュしないようにし、新しいデータが(Cache-Controlで、If-Modified-Sinceで)完全に送信されるようにするのは、this article which mentionsです。ヘッダーはサーバーによって送信されます。

明らかにその記事は非常に古いです - 私はFirefox 1.1も覚えていません。だから私は現在の一般的なブラウザのために必要な考慮事項は何ですか、私は具体的にはの場合、レスポンスをキャッシュする必要がありますか?

**私の質問を明確にするために、私は、サーバーが最新情報(Cache-Control:max-ageディレクティブまたはExpires:ヘッダーの形式)を発行するクライアント側のキャッシュと、ブラウザ有効期限とともにキャッシュ内に応答のコピーを格納するので、後続のページから発行された同じリソースに対する将来の要求は、サーバーとのいかなる接触も全く必要とせずにブラウザキャッシュから満たすことができる。すべての主要なブラウザはほとんどのコンテンツに対してこれを正しく行いますが、FirefoxはXMLHttpRequestコンテンツに対してこれを行うことができないと聞いてきました。 XMLHttpRequestを使用している現代のブラウザが仕様に応じてキャッシュしないケースを知っている人がいるかどうかを知ることができます。*

+0

JSでそれを制御する方が優れていて、より一貫しています。リフレッシュする必要がない場合は、クエリを実行しないでください。 – Javier

+0

どういう意味ですか?例を挙げていただけますか?私は、サーバーから何かを取得することができるようにしたいと思いますが、ブラウザが前のページのキャッシュにそれを持っていて、期限切れでない場合は、サーバーのトリップを防ぐためです。私はまだデータが欲しいです、私はただ質問することはできません。 – thomasrutter

答えて

11

マークノッティンガムは、ブラウザのXMLHttpRequestキャッシュ動作を示すan excellent set of functional testsを持っています。サポートしたいブラウザにページをロードし、レスポンスをキャッシュするために頼りにすることができない技術を見つけ出します。

+0

ありがとうございました。 Firefoxはこれらの「鮮度」テスト(「Expire」を含むすべてのテストを含む)に合格したので、かなり有望視されています。 – thomasrutter

+3

スクリプトはもう動作していません。 Chromeでテスト済みですコンソールのセキュリティ警告 –

4

デフォルトではブラウザによってはAJAX Firefoxはデフォルトではありません)、私が気付いているすべてのブラウザは、Cache-Controlのようなhttpヘッダーに従います。そのため、アプリケーションのキャッシュヘッダーを正しく設定してください。ここで

は一例です:

public ActionResult SomeAction() 
    { 
     var model = [...]; 
     Response.AddHeader("Cache-Control", "no-cache"); 
     return Json(model); 
    } 
今IEとFirefoxの両方が同じように動作します

。彼らは決して行動の結果をキャッシュしません。

+0

私はそれほど確かではありません。 IE6のキャッシュはあまりにも攻撃的です。私はそれによって数回噛まれた。クエリをキャッシュしたくない場合は、URLにarandom postfixを追加してください(未使用のパラメータはOKです) – Javier

+0

残念ながら、これは私が必要とするものの逆です - 私はレスポンスがキャッシュされていることを確認したいと思います。つまり、ブラウザが期限切れではないキャッシュからの前回の応答で要求を満たすことができる場合は、そのようにして元のサーバーへの要求を防ぐ必要があります。 – thomasrutter

+1

Javier、これはうまくいくが、キャッシュポリシーをクライアントに委譲しているが、これはIMHOの間違った場所である。 –

関連する問題