如何在zend_action中更改响应头

时间:2011-07-07 09:40:41

标签: zend-framework

我想做这样的事情:

if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
    header('HTTP/1.1 304 Not Modified');
    exit;
}

...... other code .....

以这种方式打字:

public function imageAction()
{
    $request = $this->getRequest();
    $response = $this->getResponse();
    if ($request->getHeader('IF_MODIFIED_SINCE')) {
        $response->setHttpResponseCode(304);
        return;
    }
    var_dump($request->getHeaders());
    $response->setHeader('Last-Modified', gmdate('D, d M Y H:i:s', time()).' GMT');
    var_dump($response->getHeaders());
    echo '11111';
    exit;

希望结果读者必须像

> this: Date: Thu, 07 Jul 2011 09:28:08
> GMT Server: Apache/2.2.15 (Linux/SUSE)
> X-Powered-By: PHP/5.3.7RC2-dev
> Last-Modified: Thu, 07 Jul 2011
> 09:27:48 GMT Content-Length: 7101
> Content-Type: text/html
> 
> 200 OK

但始终是:

> Date: Thu, 07 Jul 2011 09:30:16 GMT
> Server: Apache/2.2.15 (Linux/SUSE)
> X-Powered-By: PHP/5.3.7RC2-dev
> Expires: Thu, 19 Nov 1981 08:52:00 GMT
> Cache-Control: no-store, no-cache,
> must-revalidate, post-check=0,
> pre-check=0 Pragma: no-cache
> Content-Length: 347 Keep-Alive:
> timeout=15, max=99 Connection:
> Keep-Alive Content-Type: text/html
> 
> 200 OK

或者我必须使用zend_cache?

1 个答案:

答案 0 :(得分:10)

似乎工作正常。尝试这两个动作进行测试。您需要将域名设置为下面的“yourdomain”。

public function headerAction()
{
    $response = $this->getResponse();
    $request = $this->getRequest();

    if ($request->getHeader('IF-MODIFIED-SINCE')) {
        $response->setHttpResponseCode(304);           

        return;
    }

    $response->setHeader('Pragma', 'public', true);
    $response->setHeader('Cache-control', 'max-age=' . 60*60*24*14, true);
    $response->setHeader('Last_Modified', gmdate('D, d M Y H:i:s', time()).' GMT', true);

    // don't exit or die here or Zend Framework won't send our $response or headers
    // If you don't want to render a script, uncomment the two lines below
    //        $this->_helper->viewRenderer->setNoRender();
    //        $this->_helper->layout->disableLayout();

}

public function clientAction()
{
    $client = new Zend_Http_Client('http://yourdomain/test/header');
    $client->setHeaders('If-Modified-Since', 'Sat, 29 Oct 1994 19:43:31 GMT');
    $response = $client->request();

    Zend_Debug::dump($response->getStatus()); //prints 304
    Zend_Debug::dump($response->getHeaders());

    exit;    
}