2010-11-27 4 views
0

I) 내 프록시 서버는 그대로-내 백엔드 콘텐츠 서버로 클라이언트로부터받은 수락-Encoding 헤더를 전달을 처리하지. 백엔드 서버에서받은 데이터는 단순히 PHP 에코 (별도의 헤더 처리없이)를 사용하여 요청한 브라우저로 보내집니다. 그러나 데이터는 원시 이진 데이터로 브라우저에 표시됩니다. 내 콘텐츠 서버에 대한 수락 인코딩을 통과하지 않으면PHP 컬와 gzip : 브라우저 gzip으로 응답

후 모든 것이 괜찮습니다. 브라우저가 GZIP 데이터를 수용하기 때문에

, 왜 내 프록시 서버를 디코딩 할 필요가 않습니다 - 왜 직접 브라우저 작업에 다시 GZIP 데이터를 전달하지 않는 이유는 무엇입니까? 프록시 서버에서 데이터를 압축하는 대신 설정이 누락되면 설정이 작동합니까?


2) 나는 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 : (나는 SO GZIP 컬과 관련된 몇 가지 다른 질문을 봐 왔지만, 그들은 내 의심의 여지를 해결할 수없는).

+1

브라우저가 "Content-Encoding"헤더를 수신합니까? – stillstanding

+0

확인하지 않았습니다. 이제는 언급하지 않았을 것입니다. 어떻게 확인할 수 있습니까? 또한 : 내 백엔드 서버가 Content-Encoding 헤더를 보내지 않아야합니까? 아니면 내 프록시 서버가 그것을 먹고 있습니까? AFAIK, 내 백엔드 서버는 요청이 브라우저가 아닌 프록시에서 보낸 것처럼 보입니다. –

+1

은 크롬에서 헤더를 확인하려면 : (정확히 아래의 "자원"), 상단 탭에서 다음 "문서"를 "자원"(당신이 경우 패널을 사용)를 선택, 개발자 도구 (CTRL + ALT + I)를, 다음 무슨 일이 아마 문서의 왼쪽 목록에있는 유일한 항목, 마지막으로 오른쪽 창에있는 "머리글"입니다. – Jon

답변

0

코멘트, 일부는 더 검색하고 시행 착오 나이 문제를 해결 도움이 구글.

내 컬이 자동으로 백엔드 서버에서 보낸 응답을 수축하는 (내가 아무것도하지 않고) 설정되었다. 그래서 브라우저에서받은 헤더는 "gzip"이라고했지만 데이터를받지 못했습니다.

에 의해 응답 팽에서 컬을 중지 :

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

을하고 있고 잘 작동으로 지금은 결과를 에코 단지 수 있습니다.