現在、webapp2 Python を使用して google-app-engine でアプリを開発しています。Mac、Lion で開発し、Firefox 26、Safari 6.02、Google Chrome でテストしています。
ログインボタンのあるホームページがあります。ログインをクリックしてサーバーにフォームを AJAX で送信します。成功すると、window.location.replace を使用してホームページからログイン ボタンを除いてリロードし、ユーザー ページへのアクセスを提供します。ログアウトすると、サーバー上のハンドラーへの呼び出しがAJAXになり、セッションがダンプされ、成功したら別のwindow.location.replaceを使用して、ログインボタンでホームページをリロードします。
ただし、前後に移動すると、ユーザー アクティビティのページが表示されます。これらのページは AJAX 経由では読み込まれず、すべてサーバーからのリダイレクトまたはwindow.location.href
クライアントからのリダイレクトとして読み込まれます。
Firefox bfcache を使用して localhost で問題が発生しています。これで、ディスパッチ メソッドの Python ヘッダーを次のように設定しました。
self.response.headers["Pragma"]="no-cache"
self.response.headers["Cache-Control"]="no-cache, no-store, must-revalidate, pre-check=0, post-check=0"
self.response.headers["Expires"]="Thu, 01 Dec 1994 16:00:00"
self.response.headers['Cache-Control'] = 'public, max-age=0'
そして、Firebug でネットコンソールを確認すると、有効期限はいつかの 1970 年です。
ただし、bfcache はその仕様に従ってページをフリーズさせ、有効期限を尊重せず、戻るボタンをクリックするとページをリロードするようです。
これは、私がローカルホスト上にいるか、テストに http を使用しているためですか? 私は本当にこの bfcache 全体と混同しています。ブラウザーで onpageshow イベントを使用して、このクライアント側で何かを行うことができることは理解していますが、可能であれば、このサーバー側をソートしたいと考えています。
サーバー呼び出しの方向に必要なすべてのコントロールを持っているので、これらのページのいずれかを更新すると、ログアウトしたホームページにリダイレクトされますが、これらのページを強制的に更新することはできません.