2010-11-27 3 views
0

I) Мой прокси-сервер передает заголовок Accept-Encoding, который он получил от клиента, на мой серверный сервер содержимого как-будто-есть. Данные, полученные с сервера backend, отправляются в запрашивающий браузер, просто используя PHP echo (без заголовков обработки отдельно). Однако данные отображаются в браузере как необработанные двоичные данные.PHP curl и gzip: браузер не обрабатывает ответ gzip

Если я не передаю какой-либо 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 вместо отображения содержимого. Как упоминалось ранее, я просто передаю Accept-Encoding, который дает мне браузер, и почему проблема?

благодаря

JP

PS: (Я видел некоторые другие вопросы на SO, связанные с свернуться GZIP, но они не в состоянии разрешить мои сомнения).

+1

Получает ли браузер заголовок «Content-Encoding»? – stillstanding 2010-11-27 10:51:07

ответ

0

Комментарии, еще один поиск, пробная версия и ошибка Google помогли мне исправить эту проблему.

My curl был установлен (без меня ничего), чтобы автоматически дефлировать ответ, отправленный сервером backend. Поэтому заголовки, полученные браузером, сказали «gzip», но полученных данных не было.

Остановился локон от сдувания ответ на:

curl_setopt($curl_handle, CURLOPT_ENCODING, "identity"); 

и теперь я могу только повторить результат, как это и работает отлично.

Смежные вопросы