我正在使用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&必重新验证。 然而,我认为我正确设置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
这就是我的意思。