[HttpFoundation] HttpCache refresh stale responses containing an ETag
This commit is contained in:
parent
37cd583e78
commit
96df6b984c
@ -600,6 +600,9 @@ class HttpCache implements HttpKernelInterface, TerminableInterface
|
|||||||
*/
|
*/
|
||||||
protected function store(Request $request, Response $response)
|
protected function store(Request $request, Response $response)
|
||||||
{
|
{
|
||||||
|
if (!$response->headers->has('Date')) {
|
||||||
|
$response->setDate(\DateTime::createFromFormat('U', time()));
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
$this->store->write($request, $response);
|
$this->store->write($request, $response);
|
||||||
|
|
||||||
|
@ -181,6 +181,31 @@ class HttpCacheTest extends HttpCacheTestCase
|
|||||||
$this->assertEquals(304, $this->response->getStatusCode());
|
$this->assertEquals(304, $this->response->getStatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testIncrementsMaxAgeWhenNoDateIsSpecifiedEventWhenUsingETag()
|
||||||
|
{
|
||||||
|
$this->setNextResponse(
|
||||||
|
200,
|
||||||
|
array(
|
||||||
|
'ETag' => '1234',
|
||||||
|
'Cache-Control' => 'public, s-maxage=60',
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->request('GET', '/');
|
||||||
|
$this->assertHttpKernelIsCalled();
|
||||||
|
$this->assertEquals(200, $this->response->getStatusCode());
|
||||||
|
$this->assertTraceContains('miss');
|
||||||
|
$this->assertTraceContains('store');
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$this->request('GET', '/');
|
||||||
|
$this->assertHttpKernelIsNotCalled();
|
||||||
|
$this->assertEquals(200, $this->response->getStatusCode());
|
||||||
|
$this->assertTraceContains('fresh');
|
||||||
|
$this->assertEquals(2, $this->response->headers->get('Age'));
|
||||||
|
}
|
||||||
|
|
||||||
public function testValidatesPrivateResponsesCachedOnTheClient()
|
public function testValidatesPrivateResponsesCachedOnTheClient()
|
||||||
{
|
{
|
||||||
$this->setNextResponse(200, array(), '', function ($request, $response) {
|
$this->setNextResponse(200, array(), '', function ($request, $response) {
|
||||||
|
Reference in New Issue
Block a user