2011-07-07 48 views
0

我想让这样的事情:如何更改响应头在zend_action

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?

+0

确保你没有行“头取消设置的Last-Modified”在你的.htaccess文件 – evilReiko

回答

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;  
} 
+0

全身...好像在浏览器不发送的If-Modified-因为根据'的Cache-Control: no-cache,no-cache,must-revalidate,post-check = 0,pre-check = 0 Pragma:no-cache'正如我上面所说的那样。 – Subdigger

+0

我现在明白了这个问题,上次修改的设置不正确 –

+1

我已经更新了我的答案。问题是你退出脚本而不是发送'$ response' –