Ben müşteriye kendi sunucusunda ve görüntüler veri getirir bir iç vekil var. Ben az vekil yan kodunu tutmak istedim, ve tüm medya türleri için çalışacak müşteriye it-gibi-sadece veri gönderme içerik sunucusu aldım düşündüm. Bu HTML / METİN kodu için iyi çalışıyor. Ancak, görüntüler için. Nedenini anlamak mümkün.
İşte vekil tarafı kodu:
$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;
Neden yukarıdaki düzgün görüntüleri değil mi? (Bir kukla köprü gibi vekil yapmak mümkün değil mi - bu sunucu tarafından gönderilen sonuç yorumlamak ama sadece onu geçmek ve hala tüm içerik / medya türleri için işe yapmaz?). Birisi temiz çözüm önerebilir?
Notlar:
1) The content server handles all files through a php script, and is correctly passing the header using
header('Content-Type: image/jpeg');
Ben doğrudan sunucudan erişmek eğer iyi çalışır. Ancak vekaleten gelen, (tarayıcı ikili verileri görüntüler) çalışmıyor.
2) I don't understand CURLOPT_HEADER very well either.
Ben kullanıyorsanız
curl_setopt($curl_handle, CURLOPT_HEADER, 1);
tarayıcı (metin gibi görüntüler için) gzip'li verileri indirmek için çalışır.
Ben kullanıyorsanız
curl_setopt($curl_handle, CURLOPT_HEADER, 0);
tarayıcınız doğru metin / görüntüler, ancak görüntü verileri.
Bunlar vekil (doğrudan bağlantı) üzerinden tarayıcıda görüntüyü eriştiğinizde Google Chrome tarafından gösterilen tepki başlıkları vardır.
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
Yanıt başlıkları ben doğrudan içerik sunucusu görüntü erişim:
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
Ben bu içerik-tipi proxy üzerinden GZIP olması nedeniyle bir his var. Birisi bana bu anlamamıza yardımcı olabilir: görüntüler varsayılan apache tarafından GZipped değil mi? (Ben tasarruf daha az olabilir katılıyorum). Değilse, o zaman CURL (vekil) verileri Gzip Sıkıştırma nedir? CURLOPT_ENCODING olmamalı, "kimlik" bunu önlemek? Ben nasıl düzeltebilirim?