mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Don't set content-length when serving assets.
Setting content-length on assets causes long pauses when fetching assets that contain PHP code. These assets are invariably larger than their response bodies. By not setting a content-length, we can allow the webserver to calculate it for us. Refs #4916
This commit is contained in:
parent
843ddd6d36
commit
a65354225e
2 changed files with 37 additions and 3 deletions
|
@ -149,12 +149,11 @@ class AssetDispatcher extends DispatcherFilter {
|
||||||
}
|
}
|
||||||
$response->type($contentType);
|
$response->type($contentType);
|
||||||
}
|
}
|
||||||
if (!$compressionEnabled) {
|
$response->length(false);
|
||||||
$response->header('Content-Length', filesize($assetFile));
|
|
||||||
}
|
|
||||||
$response->cache(filemtime($assetFile));
|
$response->cache(filemtime($assetFile));
|
||||||
$response->send();
|
$response->send();
|
||||||
ob_clean();
|
ob_clean();
|
||||||
|
|
||||||
if ($ext === 'css' || $ext === 'js') {
|
if ($ext === 'css' || $ext === 'js') {
|
||||||
include $assetFile;
|
include $assetFile;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -228,4 +228,39 @@ class AssetDispatcherTest extends CakeTestCase {
|
||||||
$this->assertFalse($event->isStopped());
|
$this->assertFalse($event->isStopped());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test asset content length is unset
|
||||||
|
*
|
||||||
|
* If content length is unset, then the webserver can figure it out.
|
||||||
|
*
|
||||||
|
* @outputBuffering enabled
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testAssetContentLength() {
|
||||||
|
Router::reload();
|
||||||
|
Configure::write('Dispatcher.filters', array('AssetDispatcher'));
|
||||||
|
App::build(array(
|
||||||
|
'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS)
|
||||||
|
));
|
||||||
|
|
||||||
|
$url = 'theme/test_theme/css/test_asset.css';
|
||||||
|
$file = 'View/Themed/TestTheme/webroot/css/test_asset.css';
|
||||||
|
|
||||||
|
$request = new CakeRequest($url);
|
||||||
|
$response = $this->getMock('CakeResponse', array('_sendHeader', 'send'));
|
||||||
|
$event = new CakeEvent('Dispatcher.beforeRequest', $this, compact('request', 'response'));
|
||||||
|
|
||||||
|
$filter = new AssetDispatcher();
|
||||||
|
$filter->beforeDispatch($event);
|
||||||
|
$result = ob_get_clean();
|
||||||
|
|
||||||
|
$path = CAKE . 'Test' . DS . 'test_app' . DS . str_replace('/', DS, $file);
|
||||||
|
$file = file_get_contents($path);
|
||||||
|
$this->assertEquals($file, $result);
|
||||||
|
|
||||||
|
$expected = filesize($path);
|
||||||
|
$headers = $response->header();
|
||||||
|
$this->assertFalse($headers['Content-Length']);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue