I)我的代理服务器将从客户端收到的Accept-Encoding标头传递给我的后端内容服务器。从后端服务器接收的数据仅使用PHP echo(不单独处理标头)发送到请求浏览器。但是,数据在浏览器中显示为原始二进制数据。
如果我没有将任何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,然后问题为什么?
感谢
JP
PS :(我已经看到了与curl gzip相关的一些其他问题,但他们无法解决我的疑问。)
答案 0 :(得分:0)
评论,更多谷歌搜索和反复试验帮助我解决了问题。
我的curl设置(没有我做任何事情)自动缩小后端服务器发送的响应。因此浏览器收到的标题说“gzip”,但收到的数据不是。
通过以下方式阻止卷曲缩小响应:
curl_setopt($curl_handle, CURLOPT_ENCODING, "identity");
现在我可以按原样回显结果并正常工作。