2011-07-11 16 views
2

ユーザーがページから移動してbroswerの戻るボタンを使用したときに戻るときにGETリクエストを避けたいです。これは、FirefoxとChrome(最新バージョン)では特別な処理を行わなくても正常に動作します。バックボタンを使用する:IEとSafariはキャッシュから読み込みません。FirefoxとChromeは同じです。

ただし、戻るボタンを使用して前のページに戻るときに、SafariとIEの両方でGETリクエストが実行されます。

私は、キャッシュの動作(Last-Modified、Expires、Cache-Control)を制御しているヘッダーをうまく使いませんでした。戻るボタンを使用してIEとSafariがページをリロードするのを止める方法はありますか?

典型的なリクエストとレスポンスのヘッダーは、戻るボタンを使用してページを再読み込みするか、アドレスバーにURLを入力すると、IEとSafariで同じです。

リクエストヘッダ

Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 
Accept-Encoding:gzip, deflate 
Accept-Language:en-US 
Origin:http://165.88.162.245:8000 
Referer:http://165.88.162.245:8000/login?next=/ 
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1 

レスポンスヘッダ

Content-Language:en 
Content-Type:text/html; charset=utf-8 
Date:Tue, 12 Jul 2011 11:35:31 GMT 
Server:WSGIServer/0.1 Python/2.6.6 
Set-Cookie:sessionid=0675e1246fe03946c54d2052e7adf0c9; Path=/ 
Vary:Accept-Language, Cookie 

答えて

4

を特異的にIEのバージョンは?正確なHTTP応答ヘッダーとは何ですか?

IE9以前では、「no-cache」ヘッダーを持つページはキャッシュされません。 IE10以降では、キャッシュされた応答は、バック/フォワードナビゲーションの場合に検証なしで条件付きで検証されるか、キャッシュから引き出されます(http://blogs.msdn.com/b/ieinternals/archive/2012/08/01/internet-explorer-10-network-performance-improvements-first-available-pre-resolve-pre-connect-caching.aspxを参照)。

IE9ではこの領域にいくつかの問題が修正されました。詳細については、http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspxをお読みください。

+0

IE9のキャッシングの改善へのリンクをありがとう、それは正しい方向に私を指摘しました。問題は、私がテストしたすべてのIEインカネーションでキャッシングを無効にしたレスポンスの「Vary:cookie」ヘッダーでした。私はVaryヘッダーがなくてもページをリロードするSafariにはまだ問題があります。 – Bernhard

+0

ええ、正しく言えば、Safariはキャッシングディレクティブに関係なく常にトップレベルのページを再要求しますが、サブディストリビューションではそれらのディレクティブを尊重します。 – EricLaw

0

IEの問題はVaryヘッダーエントリでした。特に、Cookieエントリは、IEでのキャッシュを禁止します。 Ericが言及したブログエントリのおかげで、私は問題を解決することができました。

残念ながら、これはSafariの問題を解決しません。結局私ははるかに良いように見える別のアプローチに落ち着いた。リロードが私を悩ませた理由は、ページから離れて移動することによって残されたセッション状態へのアクセスを提供するために使用したことです。解決策は、この機能を提供するためにクライアントキャッシュに依存するのではなく、クライアントのキャッシュとは独立してセッション状態を再ロードするタスクを実行するURLを提供することです。

関連する問題