PHP curl и gzip: браузер не обрабатывает ответ gzip - PullRequest
0 голосов
/ 27 ноября 2010

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

Если я не передаю Accept-Encoding на свой контент-сервер, то все в порядке.

Поскольку браузер принимает данные GZIP, почему мой прокси-сервер должен декодировать их - почему не работает прямая передача данных gzip обратно в браузер? Вместо того, чтобы разархивировать данные на прокси-сервере, не хватает ли какой-то настройки, которая заставит все работать?


II) Исходя из предположений, сделанных до сих пор, я попробовал новый способ (но теперь я более растерян, поскольку у него есть свои проблемы)!.

Я использовал

....
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, связанные с curl gzip, но они не смогли разрешить мои сомнения).

1 Ответ

0 голосов
/ 27 ноября 2010

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

Мой локон был настроен (я ничего не делал), чтобы автоматически дефлировать ответ, отправленный внутренним сервером.Таким образом, заголовки, полученные браузером, сказали «gzip», но полученные данные не были.

Остановил завиток от дефлирования ответа:

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

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

...