【发布时间】:2011-05-16 12:40:09
【问题描述】:
I) 我的代理服务器将它从客户端接收到的 Accept-Encoding 标头按原样传递给我的后端内容服务器。从后端服务器接收到的数据只需使用 PHP 回显(无需单独处理标头)发送到请求浏览器。但是,数据在浏览器中显示为原始二进制数据。
如果我没有将任何 Accept-Encoding 传递给我的内容服务器,那么一切都很好。
既然浏览器接受 GZIP 数据,为什么我的代理服务器需要对其进行解码 - 为什么不直接将 gzip 数据传回浏览器工作?与其在代理服务器上压缩数据,我是否缺少一些可以使事情正常进行的设置?
II)根据stillstanding的建议,我尝试了一种新方法(但现在我更加困惑,因为它有自己的问题)!。
我用过
....
curl_setopt($curl_handle, CURLOPT_HEADER, 1);
$result = curl_exec($curl_handle);
curl_close($curl_handle);
我没有回应结果,而是这样做:
list($headers,$content)=explode("\r\n\r\n",$result,2);
foreach (explode("\r\n",$headers) as $hdr) {
header($hdr);
}
echo $content;
现在,浏览器识别出数据已被 gzip 压缩,但提供了保存 gzip 文件而不是显示内容的选项。如前所述,我只是传递了浏览器给我的 Accept-Encoding,那么为什么会出现问题?
谢谢
日本
PS:(我在 SO 上看到了一些与 curl gzip 相关的其他问题,但它们无法解决我的疑问)。
【问题讨论】:
-
浏览器是否接收到“Content-Encoding”标头?
-
没有检查。既然你提到了,很可能不是。我该如何检查?另外:我的后端服务器不应该发送 Content-Encoding 标头吗?还是我的代理服务器正在吃掉它? AFAIK,我的后端服务器认为请求来自浏览器,而不是代理。
-
要检查 Chrome 中的标题:开发人员工具 (CTRL+ALT+I),从顶部选项卡中选择“资源”(如果必须启用面板),然后选择“文档”(正好在“资源”下方"),然后可能是左侧文档列表中唯一的项目,最后是右侧窗格中的“标题”。
-
谢谢。正在并行查找,并且能够在 chrome 中查看标题。
标签: php apache curl http-headers gzip