22

一部のリンクは PJAX でラップされています。ユーザーが PJAX リンクをクリックすると、サーバーは HTML の必要な部分のみを返します。

私が次のことをした場合:

  1. PJAXリンクをクリック
  2. シンプルなリンクをクリック
  3. 戻るボタンを押す

ブラウザーには、PJAX 要求によって返されたコンテンツが表示されます。表示されるのは HTML の一部にすぎないため、HTML は破損します (この質問を確認してください)。

PJAX 応答 (Cache-Controlヘッダー) をキャッシュしないことで、これを修正しようとしました。これで問題は解決しましたが、別の問題が発生しました。ユーザーが戻るボタンを押すと、WebKit (Chrome 20.0) がサーバーから完全なコンテンツをロードpopstateし、不要な PJAX 要求を引き起こすイベントを発生させます。

正しい戻るボタンの動作を再現することは可能ですか?

4

2 に答える 2

4

要求ヘッダーに応じて HTTP リソースのさまざまなバージョンをブラウザーに認識させるために、Vary http ヘッダーを追加しました。

Vary を使用すると、no-cache ヘッダーを送信する必要がなくなるため、ページが再び高速になります。

PHP では、これは次のようになります。

header("Vary: X-PJAX");

URL ごとに 3 つの表現 (通常の http、pjax、ajax) を使用する場合があるため (既に ajax 化されているアプリで PJAX アプローチに移行するため)、実際には以下を使用します。

header("Vary: X-PJAX,X-Requested-With");

古い IE (IE9 よりも古い) バージョンをサポートする必要がある場合は、Web サーバーによって Vary ヘッダーが取り除かれていることを確認する必要があります。そうしないと、古い IE では Vary ヘッダーを提供するすべてのリソースのキャッシュが無効になるためです。

これは、.htaccess/vhost 構成で次の設定を行うことで実現できます。

BrowserMatch "MSIE" force-no-vary

編集: 根本的なクロムのバグ、https ://code.google.com/p/chromium/issues/detail?id=94369

于 2014-04-08T10:00:17.930 に答える