curl can response gzip but browser can't

Maxim Dounin mdounin at mdounin.ru
Mon Jan 21 00:38:26 UTC 2013


Hello!

On Fri, Jan 18, 2013 at 06:11:06AM -0500, wingoo wrote:

> my environment is nginx(1.3.11) + php-fpm
> 
> curl -I -H "Accept-Encoding: gzip,deflate" http://www.ihezhu.com/
> 
> HTTP/1.1 200 OK
> Server: nginx
> Date: Fri, 18 Jan 2013 05:18:31 GMT
> Content-Type: text/html; charset=utf-8
> Connection: keep-alive
> Vary: Accept-Encoding
> Set-Cookie: PHPSESSID=2quqa651uglt62ku49re2nt1n4; path=/
> Expires: Thu, 19 Nov 1981 08:52:00 GMT
> Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
> pre-check=0
> Pragma: no-cache
> Content-Encoding: gzip
> 
> but when use browser like chrome and it's response not contain
> Content-Encoding, what's wrong?
> 
> my nginx setting is
> 
>     gzip on;
>     gzip_buffers 4 16k;
>     gzip_comp_level 3;
>     gzip_http_version 1.1;
>     gzip_min_length 1k;
>     gzip_proxied any;
>     gzip_types text/plain text/css application/json application/x-javascript
> text/xml application/xml application/xml+rss text/javascript;
>     gzip_vary on;
>     gzip_disable msie6;
> 
> thanks

It looks like something on your host interferes with normal 
request handling.  Probably some firewall with content 
inspection and/or antivirus software.

I was able to simplify test case down to the LF vs CRLF difference 
in the following requests:

$ (printf "GET / HTTP/1.1\r\nHost: www.ihezhu.com\r\nAccept-Encoding: gzip\r\n\r\n"; sleep 1) | nc 210.51.54.180 80 | grep Content-Encoding
$ (printf "GET / HTTP/1.1\nHost: www.ihezhu.com\nAccept-Encoding: gzip\n\n"; sleep 1) | nc 210.51.54.180 80 | grep -a Content-Encoding
Content-Encoding: gzip

No gzip is returned with proper CRLF newlines, while with just 
bare LFs gzip is returned (likely because it bypasses content 
inspection in question).

Try disabling your antivirus software to see if it helps.

-- 
Maxim Dounin
http://nginx.com/support.html



More information about the nginx mailing list