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标头与 no-cache & must-revalidate 一起被标记为私有。但是,我认为我设置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