У меня есть внутренний прокси-сервер, который получает данные с моего собственного сервера и отображает их на клиенте.Я хотел, чтобы код прокси-стороны был минимальным, и думал, что просто отправка данных, полученных с сервера контента как есть, клиенту будет работать для всех типов мультимедиа.Он отлично работает для кода HTML / TEXT.Однако не для изображений.Я не могу понять, почему.
Вот код стороны прокси:
$curl_url="http//myserver.com/someimage.jpg";
//Open connection
$curl_handle = curl_init();
curl_setopt($curl_handle,CURLOPT_COOKIE,session_name()."=".session_id().";");
//Set the url, number of POST vars, POST data
curl_setopt($curl_handle, CURLOPT_URL, $curl_url);
curl_setopt($curl_handle, CURLOPT_POST, count($_POST));
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl_handle, CURLOPT_HEADER, 0);
/// curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $curl_request_headers);
/// Above is actually uncommented but omitting details for brevity. They are just
/// HTTP headers passed by the client
curl_setopt($curl_handle, CURLOPT_ENCODING, "identity");
//Execute post
$result = curl_exec($curl_handle);
//Close connection
curl_close($curl_handle);
echo $result;
Почему выше не отображаются изображения правильно?(Разве нельзя сделать прокси похожим на фиктивный мост - чтобы он не интерпретировал результат, отправленный сервером, а просто передавал его и все равно заставлял работать для всех типов контента / медиа?).Кто-нибудь может предложить самое чистое решение?
Примечания:
1) Контент-сервер обрабатывает все файлы через скрипт php и правильно передает заголовок, используя header('Content-Type: image/jpeg');
Работает нормально, если я получаю доступ напрямую с сервера.Однако из прокси-сервера это не работает (браузер отображает двоичные данные).
2) Я не очень хорошо понимаю CURLOPT_HEADER.
Если я использую
*Браузер 1020 *
пытается загрузить сжатые данные (как для текста, так и для изображений).
Если я использую
curl_setopt($curl_handle, CURLOPT_HEADER, 0);
Браузер отображает текст/ images правильно, но не данные изображения.
Это заголовки ответа, отображаемые в Google Chrome, когда я обращаюсь к изображению в браузере через прокси-сервер (прямая ссылка).
Response Headers
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:2576
Content-Type:text/html
Date:Mon, 29 Nov 2010 18:03:52 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=15, max=100
Pragma:no-cache
Server:Apache/2.2.14 (Ubuntu)
Vary:Accept-Encoding
X-Powered-By:PHP/5.3.2-1ubuntu4.5
Заголовки ответа при доступе к изображению непосредственно на контент-сервере:
Accept-Ranges:bytes
Connection:Keep-Alive
Content-Length:3669
Content-Type:image/jpeg
Date:Mon, 29 Nov 2010 18:07:25 GMT
ETag:"1802b6-e55-49633c9623e40"
Keep-Alive:timeout=15, max=96
Last-Modified:Mon, 29 Nov 2010 16:44:33 GMT
Server:Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.6 with Suhosin-Patch mod_ssl/2.2.11 OpenSSL/0.9.8g
У меня такое чувство, что это связано с тем, что тип контента GZIP через прокси-сервер.Может кто-нибудь, пожалуйста, помогите мне понять это: не являются ли изображения GZIPPed по умолчанию apache?(Я согласен, что экономия может быть меньше).Если нет, то CURL (прокси) распаковывает данные?Разве CURLOPT_ENCODING, «идентичность», не должен этому помешать?Как мне исправить?