2

デフォルトの Symfony2 リバース プロキシを使用しており、Cookie 設定に基づいて同じ URL のキャッシュを分離する必要があります。

このサイトでは、画像を縮小し、JavaScript を削除することで、「基本的な」サイト ビューを使用できます。コンテンツは同じなので同じ URL を使用しましたが、もちろんキャッシュは問題です。

それらを個別にキャッシュできるようにする必要があります (または、キャッシュが確実にクリアされるようにする必要があります)。

通常は次のように設定している Vary ヘッダーを変更してみました。

Vary: Accept-Encoding

..そして、次のいずれかに設定しました:

Vary: Accept-Encoding, basic

..また:

Vary: Accept-Encoding, normal

これは実際、私の Mac の Chrome では見事に機能しますが、Safari では無視されます。この時点で、他のブラウザのチェックをやめました。

それを行う最良の方法は何ですか?

4

1 に答える 1

1

Vary: Accept-Encoding は、クライアントまたはリバース プロキシに、異なるエンコーディングの URL のキャッシュを分離するように指示します。(つまり、gzip あり/なし)。

これは、gzip をサポートしていない古いブラウザーで gzip を使用せずにページが提供される場合や、gzip を使用する新しいブラウザーを使用している場合に特に便利です。したがって、リバース プロキシは同じ URL の両方のバリアントをキャッシュします。この設定がないと、リバース プロキシが gzip されたコンテンツをサポートしていないブラウザに提供することになり、望ましくない結果が生じる可能性があります。

あなたが探しているのは、おそらくキャッシュ用の「Cookie」のようなETagヘッダーです。

クライアントはキャッシュされたバージョンの etag を送信し、クライアントのキャッシュされたバージョンが有効かどうかをアプリケーションから選択できます。

$response = new Response();
$response->setETag(md5('some_identifier'));
if( $response->isNotModified($this->get('request')) )
{
    // automatically returns null content response with http 304 ( not modified ) header
    return $response; 
}
else
{
    // .. otherwise return a new response, possibly with a different ETag

    // $reponse->setEtag(md5('another_identifier'));
    return  $this->renderView('MyBundle:Main:index.html.twig', array(), $response);
}

このブログ投稿に触発されました。

于 2013-05-26T18:09:52.657 に答える