Браузеры не кэшируют ответ, отправленный MediaView - PullRequest
0 голосов
/ 13 декабря 2011

Это мой код контроллера:

  $this->viewClass = 'Media';
    $params = array(
      'id'        => $filename '.gif',
      'name'      => $filename ,
      'download'  => false,
      'extension' => 'gif',
      'path'      => $folderpath,
      'cache'     => '+30 days',
      'modified' => '@' . filemtime($pathtofile),

    );
  $this->set($params);

и ответ:

снимок экрана firebug http://i39.tinypic.com/es56di.png

Отладка отключена в core.php.Тем не менее, браузер (Firefox, Chrome) никогда не кэширует файл и всегда загружает все это.Это из-за ответа 200 OK ?Как я могу это исправить?

РЕДАКТИРОВАТЬ Возможно, мне следовало добавить образец фактического URL запроса

http://localhost/mycontroller/mymediaaction/2345

Я решил проблемуустановив атрибут name для параметра действия вместо фактического имени файла.Я все еще ценю ответ с некоторым объяснением этого поведения.

1 Ответ

0 голосов
/ 18 сентября 2012

Следующий фрагмент кода для действия контроллера будет либо обслуживать ответ 304 , либо файл.Я думаю, что функциональность checkNotModified должна выполняться функцией MediaView::render внутри, аналогично AssetDispatcher.Но пока этот фрагмент может помочь.

$modified = @filemtime(ROOT . $dir . $filename);
$this->response->modified($modified);
if ($this->response->checkNotModified($this->request))
{
    $this->autoRender = false;
    $this->response->send();
}
else
{
    $this->viewClass = 'Media';
    $params = array('id' => $filename,
        'cache' => '+1 day',
        'modified' => '@' . $modified, // Must be a string to work. See MediaView->render()
        'path' => ROOT . $dir);
    $this->set($params);
}
return;
...