mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
FIX #4392: Ensure headers are checked first before being clobbered by globally maintained state. Also ensuring tests utilize separate responses for isolation.
This commit is contained in:
parent
e28156c138
commit
f192a6ecaf
@ -448,8 +448,14 @@ class HTTP {
|
||||
|
||||
// Now that we've generated them, either output them or attach them to the SS_HTTPResponse as appropriate
|
||||
foreach($responseHeaders as $k => $v) {
|
||||
if($body) $body->addHeader($k, $v);
|
||||
else if(!headers_sent()) header("$k: $v");
|
||||
if($body) {
|
||||
// Set the header now if it's not already set.
|
||||
if ($body->getHeader($k) === null) {
|
||||
$body->addHeader($k, $v);
|
||||
}
|
||||
} elseif(!headers_sent()) {
|
||||
header("$k: $v");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,18 +13,37 @@ class HTTPTest extends FunctionalTest {
|
||||
$this->assertEmpty($response->getHeader('Cache-Control'));
|
||||
|
||||
HTTP::set_cache_age(30);
|
||||
HTTP::add_cache_headers($response);
|
||||
|
||||
HTTP::add_cache_headers($response);
|
||||
$this->assertNotEmpty($response->getHeader('Cache-Control'));
|
||||
|
||||
// Ensure max-age is zero for development.
|
||||
Config::inst()->update('Director', 'environment_type', 'dev');
|
||||
$response = new SS_HTTPResponse($body, 200);
|
||||
HTTP::add_cache_headers($response);
|
||||
$this->assertContains('max-age=0', $response->getHeader('Cache-Control'));
|
||||
|
||||
// Ensure max-age setting is respected in production.
|
||||
Config::inst()->update('Director', 'environment_type', 'live');
|
||||
$response = new SS_HTTPResponse($body, 200);
|
||||
HTTP::add_cache_headers($response);
|
||||
$this->assertContains('max-age=30', explode(', ', $response->getHeader('Cache-Control')));
|
||||
$this->assertNotContains('max-age=0', $response->getHeader('Cache-Control'));
|
||||
|
||||
// Still "live": Ensure header's aren't overridden if already set (using purposefully different values).
|
||||
$headers = array(
|
||||
'Vary' => '*',
|
||||
'Pragma' => 'no-cache',
|
||||
'Cache-Control' => 'max-age=0, no-cache, no-store',
|
||||
);
|
||||
$response = new SS_HTTPResponse($body, 200);
|
||||
foreach($headers as $name => $value) {
|
||||
$response->addHeader($name, $value);
|
||||
}
|
||||
HTTP::add_cache_headers($response);
|
||||
foreach($headers as $name => $value) {
|
||||
$this->assertEquals($value, $response->getHeader($name));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user