首頁 >後端開發 >php教程 >curl 可以看到能输出gzip 但是在浏览器下却没有输出

curl 可以看到能输出gzip 但是在浏览器下却没有输出

WBOY
WBOY原創
2016-06-06 20:50:591395瀏覽

环境 nginx + php-fpm

curl -v -I -H "Accept-Encoding: gzip,deflate" http://www.ihezhu.com/

* About to connect() to www.ihezhu.com port 80 (#0)
*   Trying 210.51.54.180... connected
> HEAD / HTTP/1.1
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: www.ihezhu.com
> Accept: */*
> Accept-Encoding: gzip,deflate
> 
<p>但直接浏览器却没有看到输出Content-Encoding 大概怎么回事?<br>
谢谢</p><p>====update<br>
原因暂时还不明, 说下我做的测试<br>
用fiddler访问, <code>不输出</code><br>
用fiddler按照curl构造参数, <code>不输出</code><br>
用chrome插件模拟curl请求, <code>不输出</code><br>
在本机模拟了服务器配置一致的环境(php.ini, fastcgi, nginx.conf以及站点配置), <code>可以输出</code><br>
现在准备在curl中模拟browser的请求, 看看怎样</p>
                            
                        


                                                                                                                        
                     <h2>回复内容:</h2>
                      
                                                            <p>环境 nginx + php-fpm</p><p><code>curl -v -I -H "Accept-Encoding: gzip,deflate" http://www.ihezhu.com/</code></p><pre class="brush:php;toolbar:false">* About to connect() to www.ihezhu.com port 80 (#0)
*   Trying 210.51.54.180... connected
> HEAD / HTTP/1.1
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: www.ihezhu.com
> Accept: */*
> Accept-Encoding: gzip,deflate
> 
<p>但直接浏览器却没有看到输出Content-Encoding 大概怎么回事?<br>
谢谢</p><p>====update<br>
原因暂时还不明, 说下我做的测试<br>
用fiddler访问, <code>不输出</code><br>
用fiddler按照curl构造参数, <code>不输出</code><br>
用chrome插件模拟curl请求, <code>不输出</code><br>
在本机模拟了服务器配置一致的环境(php.ini, fastcgi, nginx.conf以及站点配置), <code>可以输出</code><br>
现在准备在curl中模拟browser的请求, 看看怎样</p>
                            
                        
            <p class="answer fmt" data-id="1020000000162404">
                                    </p><p>建议你用wireshark抓包看看,可能只是chrome没显示这个出来。</p><p>感觉chrome的开发者工具不那么靠谱,比如显示出了 Transfer-Encoding: chunked,但是显示出来的却找不是原始的response(不是chunked的格式)。</p>
                            
            <p class="answer fmt" data-id="1020000000162529">
                                    </p><p>这个问题很有意思, 我猜是你在curl的时候, request headers提供的不足, 所以没有被CDN cache到.</p><p>但是在浏览器的情况下, request headers很完整, 所以CDN就起作用了, 既然CDN服务器节点靠近你自己的网络, 那么就不用压缩了, 直接返回给你明文, 跳过gzip节省浏览器解压时间, 加速网页响应.</p><p>我这么猜是因为response header里面有个Vary, 查了一下Vary的功能和CDN有关</p>
                            
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn