[HttpKernel] fixed Content-Length header when using ESI tags (closes #2623)

This commit is contained in:
Fabien Potencier 2011-11-14 13:46:20 +01:00
parent d67fbe9e48
commit f7c5bf1db2
2 changed files with 29 additions and 0 deletions

View File

@ -585,6 +585,9 @@ class HttpCache implements HttpKernelInterface
$response->setContent(ob_get_clean());
$response->headers->remove('X-Body-Eval');
if (!$response->headers->has('Transfer-Encoding')) {
$response->headers->set('Content-Length', strlen($response->getContent()));
}
} elseif ($response->headers->has('X-Body-File')) {
$response->setContent(file_get_contents($response->headers->get('X-Body-File')));
} else {

View File

@ -978,4 +978,30 @@ class HttpCacheTest extends HttpCacheTestCase
$this->assertTrue($this->response->headers->hasCacheControlDirective('private'));
$this->assertTrue($this->response->headers->hasCacheControlDirective('no-cache'));
}
public function testEsiRecalculateContentLengthHeader()
{
$responses = array(
array(
'status' => 200,
'body' => '<esi:include src="/foo" />',
'headers' => array(
'Content-Length' => 26,
'Cache-Control' => 's-maxage=300',
'Surrogate-Control' => 'content="ESI/1.0"',
),
),
array(
'status' => 200,
'body' => 'Hello World!',
'headers' => array(),
),
);
$this->setNextResponses($responses);
$this->request('GET', '/', array(), array(), true);
$this->assertEquals('Hello World!', $this->response->getContent());
$this->assertEquals(12, $this->response->headers->get('Content-Length'));
}
}