2

私は Symfony2 のリバース プロキシと HTTP キャッシュを使って遊んでいますが、この件についてはたくさんの記事を読みました。しかし、私の場合、それがどのように機能するかについて行き詰まっています。

これがユースケースです。

GET /api/articles次のようなものを返します。

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: application/json
Set-Cookie: PHPSESSID=12345; expires=Thu, 14-Nov-2013 14:50:35 GMT; path=/
age: 0
allow: GET, POST
cache-control: must-revalidate, no-cache, private
etag: "da4b6c4f1540a12a112936e58db06df8c95fd3c4"
vary: Accept,Accept-Encoding
x-content-digest: enbf30f962b06f99bd91843741537e112fbd3300c8
x-symfony-cache: GET /api/articles: miss, store

ご覧のとおり、Cache-Controlヘッダーはプライベートとしてマークされており、キャッシュがなく、再検証が必要です。ただしResponse、正しく設定していると思います:

    $response = clone $view->getResponse();
    $response
        ->setPublic()
        ->setEtag($etag)
        ->setSharedMaxAge(60)
        ->setVary(array('Accept'))
    ;
    if ($response->isNotModified($this->getRequest())) {

        return $response;
    }

パブリックに設定したので、動作するはずです。ヘッダーに気付いたかもしれませんがSet-Cookie、それが重要かどうかはわかりませんが、キャッシュをパブリックとして設定している限り、そうすべきではありませんよね?

ここで、 をGET /api/articles使用するIf-None-Match: {etag}と正しい 304 が返されますが、Cache-Controlヘッダーは同じです。

リバース プロキシを無効にすると、Cache-Control が正しくなり、次のように表示されることに注意してください。

Cache-Control: public, s-maxage=60それは私が除いているものです。

4

0 に答える 0