Zend Framework和响应gzip压缩
问题描述:
我正在寻找一种方法来gzip我的XML响应,只有他们。我在Zend Framework中没有找到任何材料如何做到这一点。我在我的抽象控制器中有一个响应方法,如下所示:Zend Framework和响应gzip压缩
public function xmlResponse(SimpleXMLElement $xml, $contentType = null){
$this->_helper->layout->disableLayout();
Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
$this->_response->setHeader('Content-Type', ($contentType) ? $contentType : 'text/xml');
$this->_response->setBody($xml->asXML());
} // xmlResponse
我想在这里添加gzip压缩。
感谢您的帮助!
答
这是你在找什么?:
$this->_response->setHeader('Content-Type', 'application/x-gzip');
$filter = new Zend_Filter_Compress('Gz');
$compressed = $filter->filter($xml->asXML());
$this->_response->setBody($compressed);
编辑:你可以试试这个,我没有测试它,但:
$this->_response->setHeader("Accept-Encoding", "gzip, deflate");
$this->_response->setHeader("X-Compression", "gzip");
$this->_response->setHeader("Content-Encoding", "gzip");
$this->_response->setHeader("Content-type", "text/xml");
$this->_response->setHeader("Cache-Control", "must-revalidate");
$filter = new Zend_Filter_Compress('Gz');
$compressed = $filter->filter($xml->asXML());
$this->_response->setBody($compressed);
$this->_response->sendResponse();
编辑:或者你可以只需添加此行到您的.htaccess文件
AddOutputFilterByType DEFLATE text/xml
我希望这有助于
亲切的问候,
加里
答
如果使用nginx的服务器,只是取消注释您/etc/nginx/nginx.conf
以下。加入text/xml就在里面!这是我的配置。
gzip on;
gzip_disable "msie6";
# gzip_vary on;
gzip_proxied any;
gzip_comp_level 9;
gzip_buffers 16 8k;
gzip_http_version 1.0;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
然后通过sudo /etc/init.d/nginx restart
重新启动它。
不是。我想做这样的事情:$ this - > _ response-> setHeader('Content-Encoding','gzip,deflate'); ,但我收到XML解析错误。 – 2011-06-01 10:34:18
看看我上面添加的代码 – Garry 2011-06-01 11:13:45
关闭,但是因此我得到错误“内容编码错误”。使用gzencode而不是compress可以正常工作,但响应的大小与没有gzip的大小相同。 – 2011-06-01 11:31:45